public class DynamicProxy<T> {
public static <T> T newProxyInstance(ClassLoader loader,
Class<?>[] interfaces, InvocationHandler h) {
// 寻找joinPoint连接点,AOP框架使用元数据定义
if (true) {
// 执行前一个通知
new BeforeAdvice().exec();
}
return (T) Proxy.newProxyInstance(loader, interfaces, h);
}
}
动态代理的场景类
package dynamic;
import java.lang.reflect.InvocationHandler;
public class Client {
/**
* @param args
*/
public static void main(String[] args) {
//定义一个主题
Subject subject = new RealSubject();
//定义一个handler
InvocationHandler handler = new MyInvocationHandler(subject);
//定义主题的代理
Subject proxy = DynamicProxy.newProxyInstance(subject.getClass().getClassLoader(), subject.getClass().getInterfaces(), handler);
//代理的行为,
proxy.doSomething("Finish");
proxy.doGirl();
}
}
动态代理实际上个人感觉和普通代理没什么区别,实际上的作用就是在不改变代码的情况下增强或控制对象的行为,
动态代理实现代理的职责,业务逻辑实现相关的逻辑功能,两者之间没有必然的相互耦合的关系。