代理模式(静态代理+动态代理)
静态代理

在不改变原有代码的基础上, 增加一些功能
纵向开发:dao - service - controller - 前端 横向开发:AOP 代理实现
动态代理

InvocationHandler Proxy在reflect包下
InvocationHandler是由代理实例的调用处理程序实现的接口。
每个代理实例都有一个关联的调用处理程序。
当在代理实例上调用方法时,方法调用将被编码并分派到其调用处理程序的invoke方法。
Proxy提供了创建动态代理类和实例的静态方法,它也是由这些方法创建的所有动态代理类的超类。
使用
生成代理类(需要传入一个真实的对象[已经实现接口的] ,返回一个动态生成的类)
//利用这个类,自动生成代理类 public class Proxy_ implements InvocationHandler{ //被代理的接口 private Object object; public void setObject(Object object) { this.object = object; } //生成得到的代理类 public Object getProxy(){ return Proxy.newProxyInstance(this.getClass().getClassLoader(), object.getClass().getInterfaces(),this); } @Override //处理代理实例(自动) ,返回结果 public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { // seeHouse(); log(method.getName()); //(拓展)获取执行的方法名字 Object result=method.invoke(object,args); return result; } public void log(String msg){ System.out.println("执行了"+msg+"方法"); } }
相关接口 (不同房东共有的方法)

具体实现的类(可以有很多个房东)



浙公网安备 33010602011771号