学习spring中的动态代理首先你要了解什么是动态代理,例子:
假设我们现在在外工作,要租房子,因为房东不在家里,但是房东找了中介管理房间,只要给我钱就行了,看图,租房是一个接口 ,房东和中介都要实现这个接口(必须)! 然后我们现在就只要找中介就行了,中介可以在其中扩展一些功能
比如中介要赚钱中介费 下面就是代码
租房子接口:
//租房接口
public interface Rent {
public void rent();
}
房东实现类:
//房东真实角色
public class Host implements Rent {
@Override
public void rent() {
System.out.println("房东要出租房子");
}
}
中介实现类:
package com.wen.demo03;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
//等会我们会用这个类,自动生成代理类
public class ProxyInvocationHandler implements InvocationHandler {
//被代理的接口
private Rent rent;
public void setRent(Rent rent) {
this.rent = rent;
}
//生成得到代理类
public Object getProxy(){
return Proxy.newProxyInstance(rent.getClass().getClassLoader(),rent.getClass().getInterfaces(),this);
}
//处理代理实例,并返回结果
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
seeHouse(); //扩展一下而已
Object result = method.invoke(rent, args); //这里就是参数 第一个rent就是需要被代理的类的接口
fare();
return result;
}
public void seeHouse(){
System.out.println("中介带我看房子");
}
public void fare(){
System.out.println("收中介费");
}
}
测试: