最近在看TX-LCN分布式事务源码,看到用到了静态代理就打算把java中的代理搞一下。
静态代理
接口Hello
public interface Hello {
void sayHello(String name);
}
实现类HelloImpl
public class HelloImpl implements Hello {
public void sayHello(String name) {
System.out.println("hello "+name);
}
}
代理类HelloProxy
public class HelloProxy implements Hello {
Hello hello;
public HelloProxy(Hello hello){
this.hello=hello;
}
public void sayHello(String name) {
System.out.println("之前");
hello.sayHello(name);
System.out.println("之后");
}
}
测试MainTest
public class MainTest {
public static void main(String[] args) throws Exception {
HelloImpl hello = new HelloImpl();
Hello proxy = new HelloProxy(hello);
proxy.sayHello("张三");
}
}
输出
之前
hello 张三
之后
总结:
静态代理是最简单的,代理是我们手动编写的,在编译期间代理的class已经存在。而且代理类只是简单的持有目标类的引用,耦合比较严重。一个代理类只能代理一个接口的实现类,如果有别的接口的实现类需要代理,则需要再写一个代理,代码重复,不可复用。