使用AOP打印方法调用前后的参数,但是在部分方法上不能生效,经过调查后找到了解决办法。
代码示例
interface CTService{
String m1();
}
@Service("CTService")
Class CTServiceImpl implements CTService{
public String m1(){
xxxxx;
m2();
}
@myannotation
public void m2(){
xxxxx;
}
}
注解在m2方法上不生效的原因可以参考自定义注解不生效原因解析及解决方法
因为调用m2的不是代理对象而是真实对象,所以需要手动使用代理对象去调用m2
if(null != AopContext.currentProxy()){
(CTServiceImpl)AopContext.currentProxy().m2();
}else{
m2();
}
再运行发现还是会错误,原来需要在MVC的配置文件中开启AOP的expose-proxy,参考这个链接spring@Transactional 失效原因及解决办法
再次运行注解生效了