Spring的面向切面编程也是基于动态代理来实现的
那么Spring的AOP也就是面向切面编程,就是基于动态代理来实现的,通过代理原始类增加额外功能,我们可以将额外功能一次定义然后配合切点达到多次使用的效果,比如 做日志啊 事物啊 时间啊等等…提高了复用性 开发效率.
那么在Spirng当中动态代理有两种
在Spirng当中动态代理的使用
1.如果目标对象实现了接口,默认情况下会采用JDK的动态代理来实现AOP
2.如果目标对象实现了接口,也可以强制使用CGlib来实现AOP
3.如果目标对象没有实现接口,必须采用Cglib库,Spirng会自动在JDK和CGlib用切换
如何强制使用CGlib来实现AOP?
1.添加CGlibjar包:SPRING_HOME/cglib/*.jar
2.在Spring的配置文件中加入 //默认是false 也就是用JDK的 改为true就是用Cglib的
JDK和动态代理和CGlib字节码的生成区别?
1.JDK动态代理制能对实现了接口的类生成代理,而不是针对类
2.CGLIB是针对类实现代理,主要对指定的类生成一个子类,覆盖其中的方法,添加额外功能,因为是继承,所以该类方法不能用final来声明.