spring 的Ioc和DI


控制反轉 inversion of control:

 javabean以前由開發人員用代碼管理維護,現在對象的實例化和銷燬等全部由spring容器管理,實現控制的反轉。

這是一種編程思想,就是說一些非核心的代碼由框架自動實現管理,開發人員專注於業務邏輯。


依賴注入 dependency of injection : 

對象內部需要用到其他javabean對象時,使用注入的方式引入。


理解

將bean的控制權移交給Spring容器 ,由Spring容器實現對 bean的管理。IOC 實現的過程需要對bean屬性實現注入,此時就需要用到DI。IOC與DI: 相輔相成、 相互合作,這是同一過程的不同角度的不同描述。Ioc和DI,並不算一種技術,是程序開發中的一種思想,利用spring的控制反轉和依賴注入,就不需要那麼多代碼,也不需要考慮對象間的耦合關係,由容器提供了對對象的管理,降低了代碼開發和維護的複雜度。總:降低耦合,簡化開發。



Ioc實例化對象的三種方法

1.構造器方法 。  bean必須有空構造器。

2.靜態工廠方法。 spring不創建, 由 工廠類提供靜態方法創建bean

3.實例化工廠方法 。 工廠類提供方法創建bean



注入的四種方法

1. setter方法注入。 注入的bean需要有相應的setter方法

2. 構造器方法注入。注入的bean需要有相應的帶參構造器

3. 靜態工廠方法注入

4. 實例化工廠注入。

注意加入循環依賴,不可構造器方法注入,使用setter方法注入


註解方式注入

1.加入context命名空間 2. 加入  <context:annotation-config/> 配置

@Autowired  屬性和set方法上     默認按照type類型尋找注入資源,可以使用@Qualifier來制定按照name注入

@Resource  屬性和set方法上默認按照name尋找注入資源,沒有那麼屬性按照type注入

自動掃描包:  <context:component-scan base-package=“包路徑”

不同層使用不同註解

Dao 層: : @Repository
Service 層: : @Service
視圖控制層: : @Controller


bean作用域問題


1. singleton 作用域

單例,默認,lazy-init懶加載 

提前發現潛在的配置問題

加快程序運行期速率

2. prototype

非單例,每次創建新的bean。

3. web作用域

request作用域

session作用域


bean的生命週期

定義 初始化  使用 銷燬

定義: 配置文件

初始化:配置文件中的init-methd  或者 InitializingBean接口

使用:beanFactory        ApplicationContext

銷燬:配置文件的destroy方法 或者 AbstractApplicationContext的close方法。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章