标签:object new ace main 动态代理模式 void cto dos lang
AOP动态代理的作用:解耦合,提高扩展性;
动态代理的应用场景:测试代码的执行效率,打印日志信息等;
动态代理模式:应用反射技术+代理实现
实现动态代理的核心:InvocationHandler(代理对象的功能方法)
实现原理

实现步骤
1.创建相关的类

2.核心编写代理类的代码
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
//关键:设置真实代理对象newProxyInstance,然后去获取代理对象
public class FrankPoxy implements InvocationHandler{
private Object target;
public Object getTarget() {
return target;
}
public void setTarget(Object target) {
this.target = target;
}
//获取代理对象
public Object getPoxy(){
return Proxy.newProxyInstance(target.getClass().getClassLoader(),target.getClass().getInterfaces(),this);
}
private void doSometingafter() {
System.out.println("欢迎下次光临!");
}
private void doSometingBefore() {
System.out.println("is ok");
}
//真实对象执行的方法
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
doSometingBefore();
Object invoke = method.invoke(target, args);
System.out.println(invoke);
doSometingafter();
return null;
}
3.测试结果
测试类代码
public class TestA {
public static void main(String[] args) {
ClothFactoryImpl clothFactory = new ClothFactoryImpl();
//代理商
FrankPoxy frankPoxy = new FrankPoxy();
//代理的对象
frankPoxy.setTarget(clothFactory);
//获取代理对象
ClothFactory poxy = (ClothFactory) frankPoxy.getPoxy();
poxy.buyCloth();
}
}
结果

标签:object new ace main 动态代理模式 void cto dos lang
原文地址:https://www.cnblogs.com/FrankMartin/p/12821306.html