class Test { @自定义注解 public void methodA(){ ...... } }写完了切面service和各种环绕方法后,测试了一下,生效了,于是提交,告诉队友们可以用起来,结果有一位伙计说注解不生效了,过去看,确实是加在方法上,不过是下面这样调用的:
class Test { public void methodA(){ this.methodB(); } @自定义注解 public void methodB(){ ...... } }失效的原理: 注解的原理就是通过切点进行动态代理,对原方法进行增强,有关动态代理和增强型方法可以看另外一博客:JAVA静态代理与动态代理(JDK和CGLIB) 而this.XXX这种内部调用方法,调用的是原class的方法,而不是增强后的 proxyClass,所以,自然环绕方法就不执行,注解就不生效。 解决方法: (1)增加一个新的Service类,新的Service类新增方法上加@自定义注解 注解,然后通过@Autowired 或者 @Resource 注解注入进行调用即可。这样会从容器中直接获取proxyClass。例如:Controller调Service,当前Service调用@Autowired进来的其它Service,反正就是不能this.method.
class testController { @Autowired private TestService testService; public methodA(){ testService.methodB(); } }
class testService { @自定义注解 public methodB(){ ...... } }(2)如果不想额外写一个Service类新增上报方法,想在当前类新增方法完成注解 *** 作, *** 作如下: 1:当前类实现ApplicationContextAware并重写setApplicationContext方法
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)