什么是动态代理,优点是什么
通过反射创建对象,调用方法。
如何创建与使用
动态代理类创建核心:
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