Jdk的动态代理
假设 一个客户要去公司去商谈业务,跟商务人员交谈,成功了 程序员进行操作,客户通过商务访问程序员
商务人员:代理对象
程序员:真实对象
创建一个接口 然后去现实里面的invoke()方法
//proxy 代理对象, method:真实对象的方法 ,args参数
invoke(Object proxy, Method method, Object[] args)
,然后绑定代理对象与真实对象的关系,target 真实对象
target.getClass().getClassLoader()获取真实对象的类加载器
获取真实对象实现了哪些接口,让当前代理对象下挂在这些接口中
return Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), this);
main方法中
创建 真实对象
HelloWorldIpml hwi = new HelloWorldIpml();
为真实对象绑定代理关系,生成一个代理对象
JdkDynamicProxy jdp = new JdkDynamicProxy();
IHelloWorld hw = (IHelloWorld) jdp.bind(hwi);
CGLIB 动态代理
实现接口MethodInterceptor 里面的方法 intercept(Object proxy, Method method, Object[] args, MethodProxy methodProxy)
然后
methodProxy.invokeSuper(proxy, args);
绑定关系
public Object getDynamicProxy(Class clz){
// Enhancer增强类
Enhancer enhancer = new Enhancer();
enhancer.setSuperclass(clz);
//设置回调
enhancer.setCallback(this);
//创建代理对象
return enhancer.create();
}
main 方法中
CglibDynamicProxy cdp = new CglibDynamicProxy();
HelloWorld hw = (HelloWorld) cdp.getDynamicProxy(HelloWorld.class);