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(); } }

  代理模式的好处:

    可以使得真实角色的操作更加纯粹

    公共业务交给代理,实现了业务的分工:

    公共业务发展时候,可以集中管理:

  代码模式的缺点:

    一个真实角色就要有一个代理角色,代码量翻倍(可以通过动态代理的方式来解决)

  

 

posted @ 2021-11-22 22:49  qwedfrgh  阅读(63)  评论(0)    收藏  举报