Spring AOP、IOC -- 全網最清晰講解
- 1. AOP
- 1.1 什么是AOP
- 1.2 JoinPoint(切點)
- 1.3 Advice(通知)
- 1.4 AOP 有哪些實作方式?
- 1.4.1 靜態代理
- 1.4.2 動態代理
- 2. IOC(控制反轉)
- 2.1 DI(依賴注入)
- 2.1.1建構式方法注入:
- 2.1.2setter方法注入:
- 2.1.3介面注入:
1. AOP
1.1 什么是AOP
AOP(面向切面編程) 是OOP( 面向物件編程)的一個延伸,是建立在面向物件基礎上的,方便我們將一些非核心業務邏輯抽離,從而實作核心業務和非核心業務的解耦,舉一個生活中的例子:
比如我們在餐桌上面吃飯,那么我們的首要任務就是吃飯,我們可以使用原始一些的吃法(用手抓),也可以使用文明一些的吃法(用筷子吃),如果說使用OOP的方式,那么如果想要用筷子吃飯,那么每一次都要先去拿筷子,這樣就造成了核心業務和非核心業務的耦合,而且每次都需要編程重復代碼,所以有了AOP,有了AOP之后我們可以使用Advice(1.3中有講解)幫我們在吃飯之前使用@Before注解來找一個人幫我們拿來筷子,這樣我們就可以安心的只關注我們的核心業務邏輯–“吃飯”了,從而實作核心業務和非核心業務的解耦,
1.2 JoinPoint(切點)
切點用于準確定位,確定在什么地方應用Advice(通知),
好比我們在吃飯的這個時間段,
1.3 Advice(通知)
Advice 相當于一個攔截器,在 JoinPoint(切點)“周圍”進行一系列的攔截,
在吃飯之前找一個人幫我們拿筷子我們就使用@Before,
| 注解 | 使用時間 |
|---|---|
| @Before | 在 joinpoint 方法之前執行 |
| @AfterReturning | Advice 在連接點方法正常執行后執行 |
| @AfterThrowing | Advice 在方法通過拋出例外退出并使用 |
| @After | Advice 在連接點方法之后執行 |
| @Around | 在連接點之前和之后執行 |
1.4 AOP 有哪些實作方式?
1.4.1 靜態代理
優點:可以在被代理方法的執行前或后插入其他代碼,比如事務、日志等,
缺點:如果被代理方法很多,就要為每個方法進行代理,增加了代碼維護的成本,
1.4.2 動態代理
- JDK 動態代理(基于介面)
JDK代理類必須要有實作的介面,如沒有介面則無法使用JDK動態代理,
- CGLIB 動態代理(基于類)
CGLib動態代理是一個第三方實作的動態代理類別庫,要使用CGLib必須要引入第三方類別庫,實作其MethodInterceptor介面,
2. IOC(控制反轉)
IOC是“控制反轉”,不是什么技術,而是一種設計思想,從字面上來理解就是,將控制權進行反轉,就是從原本的程式員管理物件反轉為由Spring進行物件的管理和創建,幫助我們自動管理依賴的物件,從而實作了層與層之間的解耦,所以IOC的重點也是解耦!
2.1 DI(依賴注入)
DI(依賴注入)是IOC(控制反轉)的實作方式,
2.1.1建構式方法注入:
由于同一個物件是不能被同時被構造兩次的,所以被注入的物件的整個生命周期,都應該是由IOC進行管理的,
2.1.2setter方法注入:
setter注入比構造器方法注入更加的靈活,因為可以在構造物件之后在進行注入,隨意性比較強,
比如我們在Server層訪問Dao層的時候,使用@Autowired和@Resource,這兩種也屬于setter的方法注入,
//實體
@Resource
public AuthorServer authorServer01;
@Autowired
public AuthorServer authorServer02;
2.1.3介面注入:
沒啥用,喜歡的話可以自行百度,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/229841.html
標籤:java
上一篇:Java 入門理解一下堆疊
