1.Spring、IOC與依賴注入
- Spring概述
Spring是分層的Java SE/EE應用 full-stack輕量級開源框架,以IoC(Inverse Of Control:反轉控制)和 AOP(Aspect Oriented Programming:面向切面程式設計)為核心,提供了展現層Spring MVC和持久層Spring JDBC以及業務層事務管理等眾多的企業級應用技術,還能整合開源世界眾多著名的第三方框架和類庫,逐漸成為使用最多的Java EE企業應用開源框架。
通過Spring提供的IoC容器(本質就是一個map,key是字串,值是物件),可以將物件間的依賴關係交由Spring進行控制,避免硬編碼所造成的過度程式耦合。使用者也不必再為單例模式類、屬性檔案解析等這些很底層的需求編寫程式碼,可以更專注於上層的應用。
AOP程式設計的支援
通過Spring的AOP功能,方便進行面向切面的程式設計,許多不容易用傳統OOP實現的功能可以通過AOP輕鬆應付。
- IOC的概念
劃分模組的一個準則就是高內聚低耦合。
程式間的依賴關係。
獨立性很差,可重用度不高。
2.1工廠式解耦
以上這種方式建立物件會產生耦合,在開發過程中,減少使用這種開發模式。
第一步:先把建立的xml反射替代出來new物件,用反射去建立,然後把發射物件剝離到一個配置檔案中。
第二步:然後去用BeanFactory去控制這個檔案配置。
到了第二步,這種方式就是工廠式解耦。
由原來的主動索要資源,到現在的被動的給資源。工廠生產什麼,它就接收什麼,在這個過程中有可能會產生不能匹配的檔案。
當然在建立的工廠IOC容器中有兩個讀取配置的兩個物件:一個是Properties,另一個是ResourceBundle。
ResourceBundle.getBudle(); a.這個物件只能取值不能賦值;
b.只能讀取properties配置檔案(是因為沒有新增副檔名的機會),所以別的不行。
C. 它只能讀取類路徑下的properties檔案,別的地方不行。
但是它還有一個細節就是如下全限定類名和絕對路徑的區別:
工廠式解耦原理:
2.2控制反轉-Inversion of Control
它的主要目的就是解耦。
在service中不可能有可變的方法??
想建立一個物件,只有把工廠物件放外邊,放裡邊會產生多個物件。以下就是spring中ioc的原理:
- 使用spring的ioc
注意:準備spring的jar包(5以上就行)
匯入約束xmlns
左圖就是用到spring IOC的話,需要配置的三個檔案。
- spring的分析
以下是獲取的容器中物件的方法:
BeanFactory和ApplicationContext的區別:
Spring 中bean物件的細節--以下是關於bean.xml中的分析:
- 建立bean物件的三種方式:
- Bean物件作用範圍改變
- Bean物件得生命週期
- 配置物件:把物件的建立交給spring來管理:依賴注入
什麼是依賴注入?就是把當前所需要的物件傳進來就是依賴注入。
如下程式碼所示:
複雜型別注入
補充:
@Service是一個註解啊,告訴spring建立一個實現類的例項啊。。。
就是不用再spring裡配置bean,就是因為這個@Service
@Repository用於標註資料訪問元件,即DAO元件;
在一個稍大的專案中,如果元件採用xml的bean定義來配置,顯然會增加配置檔案的體積,查詢以及維護起來也不太方便。