Spring AOP注解失效的坑及JDK动态代理
之前很多人在使用Spring中的@Transactional, @Async等注解时,都多少碰到过注解不起作用的情况。因为这些注解的功能实际上都是Spring AOP实现的,而其实现原理是通过代理实现的。Spring还有一种动态代理方式是CGLIB动态代理。虽然处理方式不一样,但是代理的思想都是一致的。如果被代理的目标对象实现了接口,那么Spring会默认使用JDK动态代理。最终发现,导致这种情况的原因是因为方法为private。无论是接口还是父类,显然都不能出现private方法,否则子类或实现类都不能覆盖到。如果方法为private,那么在代理过程中,根本找不到这个方法,引起代理对象创建出现问题,也导致了有的对象没有注入进去。
下载地址
用户评论