Spring:Spring相關(guān)知識介紹筆記
一、Srping概念
Spring屬于開源框架,Spring是于2003年流行起來的一個輕量級的Java開發(fā)基礎框架,它是為了解決企業(yè)應用開發(fā)的復雜性而提供的解決方案。該框架的主要優(yōu)勢之一就是其實現(xiàn)分層架構(gòu),分層架構(gòu)允許使用者自由選擇使用哪些組件,Spring同時為J2EE應用程序開發(fā)提供集成的框架。Spring使用基本的JavaBean來完成以前只能由EJB完成的事情。Spring具有簡單性、可測試性和松耦合的特點。Spring的核心技術(shù)是控制反轉(zhuǎn)(IoC)和面向切面(AOP)。
二、Spring原理
2.1 控制反轉(zhuǎn)(Inversion of control)(IOC)
利用java的反射特性讓一個對象的創(chuàng)建可以不用new進行實例化,可以自動的生產(chǎn),這其實就是利用java的反射特性,反射其實就是在運行時動態(tài)的去創(chuàng)建、調(diào)用對象,Spring就是在運行時,跟xml Spring的配置文件來動態(tài)的創(chuàng)建對象和調(diào)用對象里的方法。就是將對象,以及對象之間的引用關(guān)系,交給Spring容器統(tǒng)一管理。
2.2 面向切面編程(Aspect-Oriented Programming)(AOP)
AOP以OOP面向?qū)ο缶幊虨榍疤岷突A,主要用于將共通邏輯(日志記錄,性能統(tǒng)計,事務處理,異常處理等)從普通的代碼邏輯中分離出來,從而降低業(yè)務邏輯各部分的耦合度。
三、Spring框架結(jié)構(gòu)
Spring框架主要有以下7個模塊構(gòu)成:
- Spring AOP:面向切面編程思想,也提供了事務管理能力。
- Spring ORM:提供了對Hibernate、myBatis等ORM框架的支持。
- Spring DAO:提供了 對Data Access Object模式和JDBC的支持。實現(xiàn)業(yè)務邏輯與數(shù)據(jù)庫訪問代碼分離,從而降低代碼耦合度。
- Spring Web:提供了Servlet監(jiān)聽器的Context和Web應用的上下文。
- Spring Context:提供了Spring上下文環(huán)境。
- Spring MVC:提供了MVC設計模式的實現(xiàn)。
- Spring core:提供了Spring框架基本功能(IOC功能),如BeanFactory以工廠模式創(chuàng)建所需對象、通過讀取xml文件實例化對象、管理組件生命周期等等。
四、Srping生命周期
1、實例化Bean也就是我們經(jīng)常使用的new方法;
2、按照Spring上下文對實例化的Bean進行配置(IOC注入);
3、Bean實現(xiàn)BeanNameAware接口,會調(diào)用它實現(xiàn)的setBeanName(String)方法,傳遞的就是Spring配置文件中Bean的id值
4、Bean已經(jīng)實現(xiàn)BeanFactoryAware接口,會調(diào)用它實現(xiàn)的setBeanFactory(setBeanFactory(BeanFactory)傳遞的是Spring工廠自身(可以用這個方式來獲取其它Bean,只需在Spring配置文件中配置一個普通的Bean就可以);
5、Bean已經(jīng)實現(xiàn)ApplicationContextAware接口,會調(diào)用setApplicationContext(ApplicationContext)方法,傳入Spring上下文;
6、Bean關(guān)聯(lián)了BeanPostProcessor接口,將會調(diào)用postProcessBeforeInitialization(Object obj, String s)方法,BeanPostProcessor經(jīng)常被作為對Bean內(nèi)容的更改,并且由于這個是在Bean初始化結(jié)束時調(diào)用那個的方法,也可以被應用于內(nèi)存或緩存技術(shù);
7、Bean在Spring配置文件中配置了init-method屬性會自動調(diào)用其配置的初始化方法。
8、Bean關(guān)聯(lián)了BeanPostProcessor接口,會調(diào)用postProcessAfterInitialization(Object obj, String s)方法;說明:以上工作完成以后就可以應用這個Bean了,那這個Bean屬于Singleton的,所以一般情況下我們調(diào)用同一個id的Bean會是在內(nèi)容地址相同的實例,當然在Spring配置文件中也可以配置非Singleton。
9、當Bean不再需要時,會經(jīng)過清理階段,如果Bean實現(xiàn)了DisposableBean這個接口,會調(diào)用那個其實現(xiàn)的destroy()方法;
10、最后,如果這個Bean的Spring配置中配置了destroy-method屬性,會自動調(diào)用其配置的銷毀方法。
五、Srping有什么優(yōu)勢?
5.1、非侵入式設計
Spring屬于非侵入式(non-invasive)框架,它使應用程序代碼對框架的依賴程度最小。
5.2、 方便解耦、簡化開發(fā)
Spring就是一個大工廠,可以將所有對象的創(chuàng)建和依賴關(guān)系的維護工作都交給Spring容器統(tǒng)一管理,大大降低了組件之間的耦合性。
5.3、支持AOP
Spring框架提供了對AOP的支持,它允許將一些通用任務,如安全、事務、日志等進行統(tǒng)一處理,從而大大減少了代碼量、提高了代碼的復用率。
5.4、支持聲明式事務處理
只需要通過配置就可以完成對事務的管理,而無需手動編程實現(xiàn)事務的邏輯。
5.5、便于系統(tǒng)測試
Spring提供了對Junit4的支持,可以通過注解方便的進行系統(tǒng)測試。
5.6、便于集成各種優(yōu)秀框架
Spring不排斥各種優(yōu)秀的開源框架,其內(nèi)部提供了對各種優(yōu)秀框架(如:Struts、Hibernate、MyBatis、Quartz等)的直接支持。
5.7、大大降低Java EE API的使用難度
Spring對Java EE開發(fā)中非常不友好的一些API(JDBC、JavaMail等),都提供了很好封裝,使這些API應用難度會大大降低。