@@静态代理:
每个类需要对不同的方法进行单独开发,进行代理。
@@JDK中提供动态代理的方法:
Agent 类 必须实现 implements InvocationHandler | 被代理对象必须实现接口。
// 真实代理的角色
Object obj;
public AgentDemo(Object obj) {
super();
this.obj = obj;
}
/**
* jdk动态代理的对象必须实现接口
* 第一个参数不需要;
* 第二个参数method: 被代理对象的接口方法
* 第三个参数args:是被代理接口方法的参数
*/
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("Before *** ===");
if (args != null) {
for (Object o : args) {
System.out.println("Parameter: " + o);
}
}
// 实际被代理的方法
Object invoke = method.invoke(obj, args);
System.out.println("After *** ===");
return invoke;
}
// 生成代理对象的方法: jdk底层利用动态组装使用Agent的invoke方法,针对每个接口方法,编译class com.sun.proxy.$Proxy0
interface proxy = (interface)Proxy.newProxyInstance(entity.getClass().getClassLoader(), entity.getClass().getInterfaces(), new Agent(entity));
// interface 及需要代理对象的接口。