1.JDK动态代理 2.cglib代理
1、如果目标对象实现了接口,默认情况下会采用JDK的动态代理实现AOP
2、如果目标对象实现了接口,可以强制使用CGLIB实现AOP
3、如果目标对象没有实现了接口,必须采用CGLIB库,spring会自动在JDK动态代理和CGLIB之间转换
注:JDK动态代理要比cglib代理执行速度快,但性能不如cglib好。所以在选择用哪种代理还是要看具体情况,一般单例模式用cglib比较好,具体原因请自行百度。
一 JDK动态代理实现(原理是使用反射机制)首先定义接口,并实现
public interface TestService { public int add(); } public class TestServiceImpl implements TestService { @Override public int add() { System.out.println("开始执行add..."); return 0; } }定义代理类,这里要注意导入的包是import java.lang.reflect.*
public class JDKDynamicProxy implements InvocationHandler { //被代理的目标对象 private Object pro