Spring AOP底层实现原理
Spring AOP底层实现原理就是在运行时动态生成代理对象,通过代理链实现对目标对象的方法拦截。
初始化时会看目标类有没有实现InvocationHandler接口或者是Proxy类,如果实现了接口,就使用JDK动态代理,通过反射来接收被代理的类。
如果没实现就利用cglib进行AOP动态代理,CGLIB是通过继承的方式做的动态代理,是一个代码生成的类库,可以在运行时动态的生成某个类的子类,将目标对象转变为代理对象对事务进行操作。所以在初始化的时候,已经将目标对象进行代理,放入到spring 容器中。
CGLIB是基于ASM开发的一个字节码生成库,通过生成目标类的子类来实现AOP、动态代理等功能。而ASM是一个独立的字节码操作工具包。Spring的AOP的应用场景一般在日志记录、权限验证、事务管理等业务场景。
它是运行期进行织入,生成字节码,再加载到虚拟机中。