一、Spring是什麼?
Spring是一個開源的控制反轉 ( IoC ) 和面向切面 ( AOP ) 的容器框架, 它的主要目的是簡化企業開發.
二、控制反轉(IoC)
控制反轉: 所謂的控制反轉就是應用本身不負責依賴對象的創建及維護, 依賴對象的創建及維護是由外部容器負責的.
這樣控制權就由應用轉移到了外部容器, 控制權的轉移就是所謂的反轉.
public class PersonServiceBean { // 自己new一個對象 private PersonDao personDao = new PersonDaoBean(); public void save(Person person) { personDao.save(person); } } public class PersonServiceBean { // 由spring通過set方法注入對象 private PersonDao personDao; public void save(Person person) { personDao.save(person); } public void setPersonDao(PersonDao personDao) { this.personDao = personDao; } }
三、依賴注入(DI)
依賴注入: 所謂的依賴注入就是在運行期, 由外部容器動態地將依賴對象注入到組件中.
為了能更好的理解依賴注入, 我們不妨問自己兩個問題:
1. 誰依賴誰? 為什麼需要依賴?
當然是應用程序依賴於IoC容器, 應用程序需要IoC容器來提供對象需要的外部資源.
2. 誰注入誰? 注入了什麼?
當然是IoC容器注入應用程序某個對象, 注入對象所需要的外部資源(對象, 資源, 常量數據).
其實IoC和DI是統一個概念的不同角度描述, 相對IoC而言, '依賴注入' 明確描述了被注入對象依賴IoC容器配置依賴對象.
四、為何要用Spring
在項目中引入spring可以給我們帶來以下好處:
1. 降低組件之間的耦合度, 實現軟件各層之間的解耦.
2. 可以使用容器提供的眾多服務, 如: 事務管理服務, 消息服務等. 當我們使用容器管理事務時, 開發人員就不再需要手動控制事務,
也不需要處理復雜的事務傳播.
3. 容器提供單例模式支持, 開發人員不再需要自己編寫實現代碼.
4. 容器提供AOP技術, 利用它很容易實現如權限控制等功能.
5. 容器提供眾多輔助類如: JdbcTemplate、HibernateTemplate等, 使用這些類能夠加快應用的開發.
6. spring為主流的應用框架提供了集成支持, 如集成Hibernate、JPA、Struts等, 方便我們的開發.
五、輕量級與重量級
spring屬於輕量級框架還是重量級框架?
劃分一個應用屬於輕量級還是重量級, 主要看他使用了多少服務. 使用的服務越多, 容器就要為普通java對象做的工作越多,
必然會影響到應用的發布時間及運行性能.
對於spring容器, 它提供了很多服務, 但這些服務並不是默認為應用打開的, 應用需要某種服務, 還需要指明使用該服務, 如果應用使用的服務很少,
如: 只使用spring核心服務, 那麼我們可以認為此時應用屬於輕量級的, 如果應用使用了spring提供的大部分服務,這時應用就屬於重量級的.
目前EJB容器就因為它默認為應用提供了EJB規范中所有的功能, 所以它屬於重量級.