Spring的AOP以及静态代理
1.学习AOP前要学习一个设计模式:代理模式(Proxy)
为什么要学代理模式,代理模式是什么。现实生活的例子:你去租房,找的是房产中介,不用直接去找房东了!
代理模式就是SpringAOP的底层。
静态代理
动态代理
2.静态代理
角色分析:
抽象角色:一般使用接口或者抽象类来实现 【租房这个操作】
public interface Rent { public void rent(); }
真实角色:被代理的角色 【房东】
public class Fangdong implements Rent{ public void rent() { System.out.println("房东出租了房子!"); } }
代理角色:代理真实角色,代理角色代理了真实角色后,我们一般会做一些附属操作 【中介】
public class Zhongjie {
private Fangdong fangdong;
public Zhongjie() {
}
public Zhongjie(Fangdong fangdong) {
this.fangdong = fangdong;
}
public void setFangdong(Fangdong fangdong) {
this.fangdong = fangdong;
}
public void rent(){
zhaofangdong();
kanfang();
fangdong.rent();
guanlifei();
}
//这些是中介的附属操作
public void zhaofangdong(){
System.out.println("中介去找房东");
}
public void kanfang(){
System.out.println("中介带人去看房了!");
}
public void guanlifei(){
System.out.println("中介收管理费");
}
}
客户:访问代理角色的人 【租房人】

使用代理模式
//租房人 public class Client { public static void main(String[] args) { Fangdong fangdong = new Fangdong(); //代理,代理有一些附属操作 //Zhongjie zhongjie = new Zhongjie(fangdong); //当然了。Spring这边不推荐这么使用。用Set注入更好
Zhongjie zhongjie = new Zhongjie();
zhongjie.setFangdong(fangdonng); //set注入
//你不用直接找房东了。找中介租房即可 zhongjie.rent(); } }
代理模式的好处:
可以使得真实角色的操作更加纯粹
公共业务交给代理,实现了业务的分工:
公共业务发展时候,可以集中管理:
代码模式的缺点:
一个真实角色就要有一个代理角色,代码量翻倍(可以通过动态代理的方式来解决)


浙公网安备 33010602011771号