Spring是一個開源的控制反轉(Inversion of Control ,IoC)和面向切面(AOP)的容器框架.它的主要目得是簡化企業開發 .
IOC 控制反轉
public class PersonServiceBean { private PersonDao personDao = new PersonDaoBean(); public void save(Person person){ personDao.save(person); } }
PersonDaoBean 是在應用內部創建及維護的。所謂控制反轉就是應用本身不負責依賴對象的創建及維護,依賴對 象的創建及維護是由外部容器負責的。這樣控制權就由應用轉移到了外部容器,控制權的轉移就是所謂反轉。
依賴注入 (Dependency Injection)
當我們把依賴對象交給外部容器負責創建,那麼PersonServiceBean 類可以改成如下:
public class PersonServiceBean { private PersonDao personDao ; //通過構造器參數,讓容器把創建好的依賴對象注入進PersonServiceBean,當然也可以使用setter方法進行注入。 public PersonServiceBean(PersonDao personDao){ this.personDao=personDao; } public void save(Person person){ personDao.save(person); } }
所謂依賴注入就是指:在運行期,由外部容器動態地將依賴對象注入到組件中。
為何要使用Spring
至 少在我看來,在項目中引入spring立即可以帶來下面的好處
降低組件之間的耦合度,實現軟件各層之間的解耦。
可以使用容器提供的眾多服務,如:事務管理服務、消息服務等等。當我們使用容器管理事務時,開發人員就不再需要手工 控制事務.也不需處理復雜的事務傳播。
容器提供單例模式支持,開發人員不再需要自己編寫實現代碼。
容器提供了 AOP技術,利用它很容易實現如權限攔截、運行期監控等功能。
容器提供的眾多輔作類,使用這些類能夠加快應用的開發 ,如: JdbcTemplate、 HibernateTemplate。
Spring對於主流的應用框架提供了集成支持,如:集成Hibernate、JPA、 Struts等,這樣更便於應用的開發。
如果使用Spring, 我們就不再需要手工控制事務
另外,如果使用spring, 我 們也不需要處理復雜的事務傳播行為