感谢https://blog.csdn.net/god_is_gril/article/details/53168247?utm_source=blogxgwz3,成功解决问题
遇到问题如下:
测试切面方法,没有任何错误提示,绿色通过,但始终前置通知和后置通知的打印没起效果,idea显示方法关联到切面了,dubug却并没有走切面。
分析:
1、@Aspect注解标示的类没有起作用,,检查前置和后置括弧内的指示器(execution)语法配置,没有错误
2、试用junit测试加载xml的做法,bean和注解开启功能都是在xml中进行配置,测试通过
3、思考注解和xml配置的差异,最终发现我配置了切面,但是切面对应的pojo没有声明@Component,即切面的pojo没有让spring给创建bean,在切面Aspect 上添加@Component注解后,测试通过。
再回顾一下AOP的实质:
定义一个通用的功能,通过声明的方式定义这个功能在何处使用,而无需修改受影响的类,让代码之间更少耦合。
将切面类声明为spring的bean之后,就能通过的原因:
AspectJ切面根本不需要spring就能织入应用中, 为了使用Spring的依赖注入,对AspectJ切面注入协作者,就需要在Spring的配置中将切面声明的同时并声明为bean;
不管是注解还是xml配置,AspectJ自动代理都会为注解@Aspect的bean创建一个代理,这个代理会包含所有该切面的切点所匹配的bean,并在目标方法执行的前后调用通知方法,执行额外的逻辑;