码迷,mamicode.com
首页 > 其他好文 > 详细

动态代理

时间:2019-09-21 00:55:03      阅读:94      评论:0      收藏:0      [点我收藏+]

标签:art   system   static   接收   log   不可   str   throwable   style   

动态代理包括jdk动态代理和CGLIB动态代理

其中jdk动态代理是通过对象本身实现接口,而代理对象不实现接口来实现

在Spring中实现AOP即面向切面的编程的时候,需要用到动态代理,

当代理的类是基于接口实现的时候Spring会使用jdk动态代理,但是当时基于继承实现代理的时候Spring自动切换为CGLIB动态代理。

 

java代理机制中最重要的是一个InvocationHandler接口和Proxy类,这两个是实现动态代理不可或缺的。

invocationHandler 中有一个唯一的方法invoke()

Object invoke(Object proxy,,Method method,Object[] args ) thros throwable

proxy:所被代理的真实对象

method:所要调用的真实对象的某个方法的Method

args: 调用真实对象的某个方法时接收的参数

 

proxy类中的中最常用的方法就是 newproxyinstance()方法

public static Obejct newProxyInstance(ClassLoader losder,Class<?>[] interface,InvocatinHandler h)throws illega;ArgumentException{};

 

loader :一个classloader对象定义了由哪个classloader对象来对生成的代理对象进行加载

interfaces:一个interface对象的数组,是给需要被代理的对象提供的一组接口,这个代理对象就宣称可以实现这些接口实现多态

h: 一个InvocationHandler对象,表示的是当我这个动态代理对象在调用方法的时候,会关联到哪一个InvocationHandler对象上

 

代码实现


//interface
public interface A{
public void a();
public void aa(String str);

}
//realsubbject

public class Realsubbject implements A{
@Overrider
public void a(){}
@Override
public void aa(String str){}


}
//proxy代理类
public class jdkproxy implements invocationhandler {

//subjext
private Object subObject;

public jdkprocy(Object subObject){this.subObject=subObject;}
@Overrider
public Object invokeObject proxy,Mehtod method,Onject<?>[] args)thorows throwable{
//before
...
method.invoke(subject,args);//代理调用方法的使用总是会自动跳转到 
                           //相关的handler对象的invoke方法。
//after
...

return null;

}

}
//实现类

public class Imp{

A subObject=new Realsubject();

InvacotionHandler  handler=new jdkobject(sunObject);//把需要代
                                //理的对象,通过该对象来调用方法

A subObject=(A)Proxy.newProxyInstance(h.getclass().getclassloader(),realObject.getclass().getinterface(),h);
System.out.println(subObject.getClass().getName());


}

 

reference:https://blog.csdn.net/weixin_34362991/article/details/85589143

动态代理

标签:art   system   static   接收   log   不可   str   throwable   style   

原文地址:https://www.cnblogs.com/bowenqianngzhibushiwo/p/11561065.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!