1、静态代理
|-代理对象和目标对象实现相同接口,重写目标对象的方法
//目标对象
UserDao target = new UserDao();
//代理对象,把目标对象传给代理对象,建立代理关系
UserDaoProxy proxy = new UserDaoProxy(target);
proxy.save();//执行的是代理的方法
2.1动态代理(JDK)--【只能用接口去接】
implements InvocationHandler
|-private Object target;
|-invoke(Object proxy, Method method, Object[] args)
getProxy(
| Proxy.newProxyInstance(
target.getClass().getClassLoader(),
target.getClass().getInterfaces(),
new InvocationHandler(){....});
2.2动态代理(CGLIB)
implements MethodInterceptor
|-getProxyInstance(){
//1.工具类
Enhancer en = new Enhancer();
//2.设置父类
en.setSuperclass(target.getClass());
//3.设置回调函数
en.setCallback(this);
//4.创建子类(代理对象)
return en.create();
}
|-intercept(Object obj, Method method, Object[] args, MethodProxy proxy)
method.invoke(target, args);