javascript
Spring IOC 和 AOP 概览
IOC(控制反轉(zhuǎn))
IoC(Inversion of Control,控制倒轉(zhuǎn))。所謂IoC,對于spring框架來說,就是由spring來負責控制對象的生命周期和對象間的關系。
在沒有IOC時,我們通過new 等關鍵字等方式,自己實例化對象。而使用IOC只需要通過IOC容器去獲取對象,所有的類的創(chuàng)建、銷毀都由spring來控制,也就是說控制對象生存周期的不再是引用它的對象,而是spring。
IOC容器
Spring中提供了兩種IoC容器:
- BeanFactory
- ApplicationContext
兩個容器間的關系如下圖:
ApplicationContext是BeanFactory的子類,所以,ApplicationContext可以看做更強大的BeanFactory。
無論使用哪個容器,我們都需要通過某種方法告訴容器關于對象依賴的信息,Spring提供以下幾種配置對象依賴信息的方式:
- 通過注解來配置類和類的依賴關系
- 通過XML來配置類和類的依賴關系
- 通過編寫代碼來配置類和類的依賴關系
Spring IOC的過程
Spring的IoC容器在實現(xiàn)控制反轉(zhuǎn)和依賴注入的過程中,可以劃分為兩個階段:
- 容器啟動階段
- Bean實例化階段
在上述兩個階段,Spring提供了一種叫做BeanFactoryPostProcessor的容器擴展機制。該機制允許我們在容器實例化相應對象之前,對注冊到容器的BeanDefinition所保存的信息做相應的修改,比如我們可以修改其中bean定義的某些屬性,為bean定義增加其他信息等。
容器擴展機制具體參考:細說Spring——IoC詳解(深入IoC實現(xiàn))
容器啟動階段
(1)加載配置文件信息
容器創(chuàng)造對象的第一步,就是加載配置文件信息,我們已經(jīng)知道我們主要通過xml文件和注解的方式來告訴容器對象間的依賴信息。
(2)解析配置生成BeanDefinition
在BeanFactory容器中,每一個注入對象都對應一個BeanDefinition實例對象,該實例對象負責保存注入對象的所有必要信息,包括其對應的對象的class類型、是否是抽象類、構(gòu)造方法參數(shù)以及其他屬性等。當客戶端向BeanFactory請求相應對象的時候,BeanFactory會通過這些信息為客戶端返回一個完備可用的對象實例。
Spring通過使用加載解析配置文件的類BeanDefinitionReader,讀取配置文件并解析,之后將解析后的文件內(nèi)容映射到相應的BeanDefinition。
Bean實例化階段
實例化流程圖:
AOP(面向切面編程)
AOP(Aspect Oriented Programming,面向切面編程)是一種編程范式,提供從另一個角度來考慮程序結(jié)構(gòu)以完善面向?qū)ο缶幊?#xff08;OOP)
AOP能夠?qū)⒛切┡c業(yè)務無關,卻為業(yè)務模塊所共同調(diào)用的邏輯或責任,例如事務處理、日志管理、權(quán)限控制等,封裝起來,便于減少系統(tǒng)的重復代碼,降低模塊間的耦合度,并有利于未來的可操作性和可維護性。
AOP相關概可以參考:細說Spring——AOP詳解(AOP概覽)
Spring默認采取的動態(tài)代理機制實現(xiàn)AOP,當動態(tài)代理不可用時(代理類無接口)會使用CGlib機制。
但Spring的AOP有一定的缺點:
AOP的詳細實現(xiàn)機制:AOP的實現(xiàn)機制
參考
- 重點好文:細說Spring
- 面試問爛的 Spring AOP 原理、SpringMVC 過程
- 理解Spring的AOP和IOC實現(xiàn)原理
- 我對AOP的理解
總結(jié)
以上是生活随笔為你收集整理的Spring IOC 和 AOP 概览的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux用户权限查看命令(linux用
- 下一篇: Spring IOC 容器启动、Bean