文章目录
1. 动态代理模式的应用场景
- 框架中使用的比较多
- 在程序启动后,自动生成代理类
2. 动态代理模式实现方式?
- JDK自带的动态代理
- Javaassist字节码操作库实现
- CGLIB
- ASM(底层使用指令,可维护性差)
3. 使用jdk自带的实现动态代理
3.1 创建代理接口:IStar
public interface IStar {
void sing();
void signContract();
void collectMoney();
}
3.2 创建待代理对象类:Star
public class Star implements IStar {
private String name;
public Star(String name) {
this.name = name;
}
@Override
public void sing() {
System.out.println(this.name + "明星唱歌");
}
@Override
public void signContract() {
System.out.println("委托给经济人签合同");
}
@Override
public void collectMoney() {
System.out.println("委托给经纪人收款");
}
}
3.3 测试
public class Client {
public static void main(String[] args) {
Star star = new Star("袁思思");
IStar proxyStar =(IStar) Proxy.newProxyInstance(ClassLoader.getSystemClassLoader(), new Class[]{IStar.class}, new InvocationHandler() {
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
Object obj = null;
if (method.getName().equals("sing")){
obj = method.invoke(star, args);
}
return obj;
}
});
proxyStar.sing();
}
}
结果输出
袁思思明星唱歌
4. 动态代理模式可以和其他设计模式结合呢?
这块可以多阅读spring的源码以及其他优秀框架进行学习。