IOC(控制反轉)、DI(依賴注入)

ioc存在的意義:“高內聚,低耦合”
ioc可以使類與類之間-高內聚: 類內部的關係越緊密越好;低耦合: 類與類的關聯越少越好。用自己的話說就是類與類之間需要調用的時候,我們再也不是直接去調用了,而是通過ioc容器,運行的時候動態的生成對象、執行對象的方法、改變對象的屬性,spring就是通過反射來實現注入的。
採用了依賴注入,在初始化的過程中就不可避免的會寫大量的new。這裏IoC容器就解決了這個問題。這個容器可以自動對你的代碼進行初始化,你只需要維護一個Configuration(可以是xml可以是一段代碼),而不用每次初始化一輛車都要親手去寫那一大段初始化的代碼。這是引入IoC Container的第一個好處

給ioc的定義:
創建對象
 Ioc—Inversion of Control,即“控制反轉”,不是什麼技術,而是一種設計思想。在Java開發中,Ioc意味着將你設計好的對象交給容器控制,而不是傳統的在你的對象內部直接控制。
給對象屬性賦值
DI(Dependency Injection,依賴注入),Ioc的一個重點是在系統運行中,動態的向某個對象提供它所需要的其他對象。這一點是通過DI(Dependency Injection依賴注入)來實現的。

主要通過:下面三個方法實現在這裏插入圖片描述
FileSystemXmlApplicationContext與ClassPathXMLApplicationContext的實現:
在這裏插入圖片描述
annotationXmlApplicationContext的實現方法:
創建對象的四個註解:

@Component 創建對象加入容器。如:工具類,除了dao、service、controller其他以外的類使用此註解。

@Repository 同@Component ,用於修飾持久層的類。

@Service 同@Component ,用於修飾業務層的類。

@Controller 同@Component ,用於修飾表現層的類。

依賴注入的四個註解:

@Autowired 給對象屬性賦值: 1. 根據類型注入(字段類型,方法形參類型); 2. 根據名稱注入(字段名稱,方法形參名稱)

@Qualifier 要配置@Autowired使用,可以只根據名稱注入。 也可以在純註解中單獨使用。

@Resource 瞭解,jdk1.8以後不提供此註解的支持。

@Value 直接給簡單類型屬性賦值,或獲取配置文件值。

對象範圍、生命週期相關的註解:

@Scope 指定對象爲singleton單例,或prototype多例。

@Lazy 延遲初始化(使用較少,因爲我們大多數單例的對象都是在啓動時候創建。)

@PostConstruct 修飾方法,修飾的方法會在創建對象之後執行。

@PreDestroy 修飾方法,修飾的方法會在調用容器的close()方法時候執行。

純註解開發用到的一些註解:

@Configuration 指定註解配置類

@ComponentScan 指定註解掃描的包

@Import 導入其他註解配置類

@PropertySource 加載類路徑下的配置文件

@Value、@Qualifier

@Bean 修飾方法,會自動把方法返回值加入ioc容器

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