1、什么是代理模式
一个是真正的你要访问的对象(目标类),一个是代理对象,真正对象与代理
对象实现同一个接口,先访问代理类再访问真正要访问的对象。
代理模式分为静态代理、动态代理。
静态代理是由程序员创建或工具生成代理类的源码,再编译代理类。所谓静态也就是在程序运行前就已经存在代理类的字节码文件,代理类和委托类的关系在运行前就确定了。
动态代理是在实现阶段不用关心代理类,而在运行阶段才指定哪一个对象
简单的说你要租房子,你只要提供你要的需求,比如价格,地段等。然后交有中介帮你找房子(before),然后确定了房子中介再帮你联系房东签订合同(after)。这整过程,你把你租房子的需求交给了中介处理,中介就是你的一个代理。
2、代码
/**
* 父类,提供一个要被代理的方法
*/
public interface ProxyInterface {
public void test();
}
/**
* 被代理类,实现付类的的方法
*/
public class Target implements ProxyInterface {
@Override
public void test() {
System.out.println("执行TEST 方法。。。");
}
}
/**
* 代理类,也同样实现付类的方法
*/
public class Proxy implements ProxyInterface {
//这里是装配被代理类的Target
private ProxyInterface proxyInterface;
public Proxy(ProxyInterface proxyInterface) {
this.proxyInterface = proxyInterface;
}
//然后对在被代理类Target执行前后设置业务逻辑代码
@Override
public void test() {
System.out.println("执行前 业务逻辑代码");
proxyInterface.test();
System.out.println("执行后 业务逻辑代码");
}
}
main方法
public class ProxyMain {
public static void main(String[] args) {
ProxyInterface target = new Target();
//代理对象 通过构造器注入目标对象
ProxyInterface proxy = new Proxy(target);
proxy.test();
}
}
3、执行结果
4、总结
静态代理就是实现同一个接口的方法,利用一个子Proxy类在另外一个子类Target方法执行前后执行业务逻辑,也就是Spring 的AOP 面向切面编程。