AspectJ是一个面向切面的框架,具体的解释百度很详细.这里是拦截自定义注解,话不多说, 直接上代码:
需要的依赖:
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>1.8.6</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.8.6</version>
</dependency>
1.自定义注解:
@Documented
@Target({
ElementType.METHOD
})
@Retention(RetentionPolicy.RUNTIME)
public @interface Test{
int expire() default 60;
Class<?> clazz() default String.class;
}
2.重要的是xml的配置, 其实很简单.
<!--开启aspectj拦截 --> *必须写
<aop:aspectj-autoproxy proxy-target-class="true"/>
<!-- 缓存拦截器 --> //此类并不是一个拦截器,具体是一个切面,当aspectj拦截我们自定义的注解时,会执行此类
<bean id="testInterceptor" class="com.*.*.*.TestInterceptor"/>
<!-- aop切面 -->
<aop:config>
<aop:aspect ref="cacheInterceptor">
<aop:around method="doAround" pointcut="@annotation(com.*.*.annotation.Test)"/> //@annotation(com.*.*.annotation.Test) 自定义注解的全路径
</aop:aspect>
</aop:config>
3.切面定义
public class TestInterceptor {
public Object doAround() throws Throwable {
//@TODO
//具体代码,具体业务需求 (此处略)
return null;
}
}
4.使用
按照业务需求, 将自定义的注解@Test注解到类上就ok了, 就是这么简单.
5.自己遇到的问题
如果测试,aspectj不拦截自定义注解的时候,请检查你的代码是否是在同一个类中被调用,如果被自定义注解的类,被调用了, 请将此类单独提出一个新的类,就可以了(自己就是遇到这个问题,找了好久,脑袋都弄过大了,才找到)
具体代码是公司的,不好上传,这里只是讲讲具体用法,按照这个步骤就能实现.
有问题的可以评论,会即使回复的,
希望对你们有所帮助!