为了简单期间,我从mykong上找了3.X的脚手架工程,可以参考这里。我略作了调整,改成了JDK 1.8.
1 添加依赖
<!-- aop --> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjrt</artifactId> <version>1.8.9</version> </dependency> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>1.8.9</version> </dependency>
这里用的是1.8.x,如果你参照网上很多用的1.6.x版本的话,会在运行时报这个错:Invalid byte tag in constant pool: 18
2 写一个注解
我这里要验的是对注解 执行aop
package com.mkyong.web.annotation; import java.lang.annotation.*; @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) @Documented public @interface MeterMethod { }
注意这里是METHOD类型的,因为Spring的AOP的@annotation只支持方法注解。
3 写一个Aspect
package com.mkyong.web.aspect; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import java.util.Arrays; @Aspect public class LogAspect { @Around("@annotation(com.mkyong.web.annotation.MeterMethod)") public Object doAround(ProceedingJoinPoint joinPoint) throws Throwable { System.out.println("logAround() is running!"); System.out.println("hijacked class : " + joinPoint.getSignature().getClass().getCanonicalName()); System.out.println("hijacked method : " + joinPoint.getSignature().getName()); System.out.println("hijacked arguments : " + Arrays.toString(joinPoint.getArgs())); System.out.println("Around before is running!"); Object res = joinPoint.proceed(); System.out.println("Around after is running!"); System.out.println("******"); return res; } }
4 xml配置
添加2行
<aop:aspectj-autoproxy /> <bean class="com.mkyong.web.aspect.LogAspect" />
如果报错的话,看看顶上加几行
xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation=" http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd"
最后就可以验证了