Spring是什麼~春天!哈哈~
Spring是一個開源的
控制反轉(Inversion of Control ,IoC)和
面向切面(AOP)的
容器架構.它的主要目得是
簡化企業開發.
那好,那到底什麼是控制反轉呢?
先來看一段代碼:
public class PersonServiceBean {
private PersonDao personDao = new PersonDaoBean();
public void save(Person person){
personDao.save(person);
}
}
lPersonDaoBean 是在應用內部建立及維護的。
l所謂控制反轉就是應用本身不負責依賴對象的建立及維護,依賴對象的建立及維護是由外部容器負責的。這樣控制權就由應用轉移到了外部容器,控制權的轉移就是所謂反轉。
當我們把依賴對象交給外部容器負責建立,那麼PersonServiceBean 類可以改成如下:
public class PersonServiceBean {
private PersonDao personDao ;
//通過構造器參數,讓容器把建立好的依賴對象注入進PersonServiceBean,當然也可以使用setter方法進行注入。
public PersonServiceBean(PersonDao personDao){
this.personDao=personDao;
}
public void save(Person person){
personDao.save(person);
}
}
所謂依賴注入(Dependency Injection)就是指:在運行期,由外部容器動態地將依賴對象注入到組件中。
為何要使用Spring?
1.降低組件之間的耦合度,實現軟體各層之間的解耦。
2.可以使用容器提供的眾多服務,如:交易管理服務、Message Service等等。當我們使用容器管理事務時,開發人員就不再需要手工控制事務.也不需處理複雜的事務傳播。
3.容器提供單例模式支援,開發人員不再需要自己編寫實現代碼。
4.容器提供了AOP技術,利用它很容易實現如許可權攔截、運行期監控等功能。
5.容器提供的眾多輔作類,使用這些類能夠加快應用的開發,如: JdbcTemplate、 HibernateTemplate。
6.Spring對於主流的應用程式框架提供了整合支援,如:整合Hibernate、JPA、Struts等,這樣更便於應用的開發。
7.……等等
輕量級與重量級概念的劃分
spring屬於輕量級架構,還是重量架構?其實劃分一個應用是否屬於輕量級還是重量級,主要看它使用了多少服務.使用的服務越多,容器要為普通java對象做的工作就越多,必然會影響到應用的發布時間或者是運行效能
對於spring容器,它提供了很多服務,但這些服務並不是預設為應用開啟的,應用需要某種服務,還需要指明使用該服務,如果應用使用的服務很少,如:只使用了spring核心服務,那麼我們可以認為此時應用屬於輕量級的,如果應用使用了spring提供的大部分服務,這時應用就屬於重量級。目前EJB容器就因為它預設為應用提供了EJB規範中所有的功能,所以它屬於重量級。