首页IT科技java中代理模式(java代理模式的分类)

java中代理模式(java代理模式的分类)

时间2025-07-30 22:00:32分类IT科技浏览6067
导读:说到代理,大家肯定都有接触过。毕竟当有些事务不想亲自处理时,会选择委托给别人进行解决。那么在...

说到代理               ,大家肯定都有接触过               。毕竟当有些事务不想亲自处理时                       ,会选择委托给别人进行解决                       。那么在java中也有着这样的机制      ,叫做代理模式      。主要分为两大类:静态代理和动态代理           。一种是运行前就存在           ,另一种是运行后才进行创建                        。下面我们就java中的两种代理模式进行讲解          。

1.静态代理

由程序员创建或者由第三方工具生成                        ,再进行编译;在程序运行之前          ,代理类的.class文件已经存在了       。静态代理通常只代理一个类       ,并且要事先知道代理的是什么                        。

publicclassBlogStaticProxyimplementsIBlogService{ privateIBlogServiceblogService; publicBlogStaticProxy(IBlogServiceblogService){ this.blogService=blogService; } @Override publicvoidwriteBlog(){ System.out.println("startwriting..."); blogService.writeBlog(); System.out.println("endwriting..."); } }

2.动态代理

动态代理的代理类在程序运行前是不存在的                        ,也就是说代理类在程序运行时才创建的代理模式成为动态代理              。这种情况下              ,代理类并不是在Java代码中定义好的   ,而是在程序运行时根据我们的在Java代码中的“指示               ”动态生成的   。

publicclassMainClass{ publicstaticvoidmain(String[]args){ //1               、创建一个真实角色 Singertarget=newSinger(); //2                     、调用Proxy.newProxyInstance方法                       ,并构造一个InvocationHandler对象                  , //3        、在对象内部重写invoke方法,同时调用method.invoke(target,args); //4            、并在该方法的上下添加自己的代码逻辑 //其中:target.getClass().getClassLoader():获取类加载器                   ,用来生成代理对象; //target.getClass().getInterfaces()获取接口元信息; ISingeriSinger=(ISinger)Proxy.newProxyInstance(target.getClass().getClassLoader(),target.getClass().getInterfaces(),newInvocationHandler(){ @Override publicObjectinvoke(Objectproxy,Methodmethod,Object[]args)throwsThrowable{ System.out.println("动态代理---向观众问好");//在真实对象的方法被调用“前                       ”编写自己的业务逻辑 ObjectreturnValue=method.invoke(target,args);//此处通过反射调用真实对象对应的方法; System.out.println("动态代理---向观众问好");//在真实对象的方法被调用“后      ”编写自己的业务逻辑 returnreturnValue; } }); iSinger.sing(); } } //测试结果 "C:\ProgramFiles\Java\jdk1.8.0_211\bin\java.exe""-javaagent:C:\Program....... 动态代理---向观众问好 singasong 动态代理---向观众问好 Processfinishedwithexitcode0

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
微信小程序底部导航自定义(小程序怎么自定义导航栏,导航栏放图片、设置高度) 领航者公司(“CSDN 丨CDC领航者之夜”启航 AIGC 时代,助力技术管理者打造高效能研发团队)