动态代理

动态代理

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

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

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

如何创建与使用

动态代理类创建核心:

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("通过动态代理,调用方法,获取结果");
 }

 

 

posted @ 2021-09-25 18:37  你就是我  阅读(61)  评论(0编辑  收藏  举报