java中的动态代理实现,java jdk动态代理原理
代理的意思是:在某些场景下,对象会找代理人帮他完成一些工作,比如某个明星的代理,买家找房产中介等。
代理主要是对对象的行为做一些附加的辅助操作。
如何创建代理对象:
Java中代理的代表类是:Java.lang.reflect.Proxy
Proxy提供了一个静态方法来为对象生成代理对象返回。
主要类别:
公共类测试{ public static void main(string[]args){//1。创建类,对象类必须实现接口star s=new star(晓明);//为明星对象小明生成一个代理对象(broker)skills 2=staragentproxy . get proxy(s);S2 . sing();//取代理的S2 . jump();//运行结果://代理开始//小明开始唱歌//代理结束//代理开始/小明开始跳舞//代理结束}} Star类(object类):
//star类公共类star实现skill { private string namepublic star(String name){ this . name=name;}//重写方法public void jump(){ system . out . println(名称 start dancing );} public void sing(){ system . out . println(name 开始唱歌);}}行为接口类:
//行为类公共接口技能{ void jump();//Dance void sing();//唱歌}代理类:
导入Java . lang . reflect . invocation handler;导入Java . lang . reflect . method;导入Java . lang . reflect . proxy;//代理类public class StarAgentProxy {//定义一个方法返回一个star对象的代理对象public static Skill get Proxy(star obj){//为这个对象生成一个代理对象Xiaoming/* public static Object new Proxy instance(class loader,class?[]接口,对象实现的接口列表,Invoke Handler H)*/return(skill)proxy . newproxyinstance(obj . getclass()。getclassloader(),Obj。GetClass()。GetInterfaces(),New Invocation Handler(){ @ override public object invoke(object proxy,method method,object [] args)抛出Throwable { system . out . println( agent start );//真的让小明载歌载舞//method==被调用的方法对象,args==表示这个方法的参数,objectrs=method.invoke (obj,args);System.out.println(“代理结束”);返回RS;} });}}实施步骤:
1.必须有一个接口。
2.代理对象需要实现接口。
3.使用代理类提供的方法获取对象的代理对象。
通过代理对象调用方法的执行过程是什么样的?
1.先去中介吧。
2.代理可以为该方法做一些额外的辅助工作。
3.开始执行真正触发对象的方法。
4.返回给代理,代理负责将结果返回给方法的调用方。
代码优化的关键步骤:
1.必须有接口,实现类要实现接口(代理通常是基于接口实现的)。
2.创建一个实现类的对象,它是一个业务对象,然后为该业务对象创建一个代理对象。
动态代理的优势:
1、可以在不改变方法源代码的情况下增强方法功能,提高代码重用性。
2.简化编程工作,提高开发效率,提高软件系统的可扩展性。
3.您可以充当代理对象的所有方法的代理。
4.它非常灵活,支持任何接口类型的实现类对象作为代理,也可以直接作为接口本身的代理。
一个充当任何接口类型的实现类对象的代理的框架(运行泛型)
public static T T get(T obj){ return(T)proxy . new proxy instance(obj . getclass()。getClassLoader(),obj.getClass()。getInterfaces(),new invocation handler(){ @ Override public Object invoke(Object proxy,Method method,Object[] args)抛出Throwable { return null} });}关于理解Java动态代理的原理和实现的这篇文章到此为止。关于Java动态代理的更多信息,请搜索Popular IT以前的文章或继续浏览下面的相关文章。我希望你以后能更多地支持流行音乐!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。