首页 > 其他 > 详细

动态代理

时间:2022-05-27 20:49:16      阅读:12      评论:0      收藏:0      [点我收藏+]

动态代理

什么是动态代理,优点是什么

通过反射创建对象,调用方法。

优势:在不改变原有代码的基础上,执行目标方法时,可以添加额外功能

如何创建与使用

动态代理类创建核心:

1、创建类实现InvocationHandle接口

2、创建成员变量target

3、构造方法target赋值

4、重写invoke方法

准备:创建租房接口Rent,创建租户Renter实现Rent接口,里面方法随意(注意jdk动态代理必须有接口!)

动态代理代码

import java.lang.reflect.InvocationHandler;
 import java.lang.reflect.Method;
 import java.lang.reflect.Proxy;
 //创建动态代理的服务类
 public class RenterService {
     public static Object getService(Object target) {
         return new RenterInvocationHandler(target).getProxy();
     }
 }
 //内部类完成动态代理功能
 class RenterInvocationHandler implements InvocationHandler {
     private Object target;
     public RenterInvocationHandler(Object target) {
         this.target = target;
     }
 ?
     @Override
     public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
         System.out.println("===中介进入===");
         Object result = method.invoke(target, args);
         System.out.println(result);
         System.out.println("===开始帮租户找房子!===");
         return result;
     }
 ?
     public Object getProxy() {
         return Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), this);
     }
 }
 

使用:通过动态代理获取对象

@Test
 void contextLoads() {
     Renter renter=new Renter();
     //通过动态代理获取对象
     Rent rent= (Rent) RenterService.getService(renter);
     String res = rent.rent("通过动态代理,调用方法,获取结果");
 }

 

 

动态代理

原文:https://www.cnblogs.com/youisme/p/15335110.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!