Spring框架是一個(gè)創(chuàng)建并管理bean(類)的容器;使用反射技術(shù)來創(chuàng)建bean的實(shí)例,設(shè)計(jì)模式上使用工程模式(BeanFactory)。Spring容器默認(rèn)按照單例的方式來創(chuàng)建bean,可以通過設(shè)置< bean>節(jié)點(diǎn)中的scope屬性來設(shè)置為每次獲取時(shí)創(chuàng)建不同的實(shí)例 <bean scope="prototype/>
1. Spring的體系結(jié)構(gòu)組成?
Spring由核心容器(Core Container)、AOP(Aspect Oriented Programming)、數(shù)據(jù)訪問及集成(Data Access/Integratioin)、Web、Test等模塊組成。
核心容器:由spring-beans, spring-core, spring-context和spring-expression 4個(gè)模塊組成。
- spring-core:提供了框架的基本組成部分,包括控制反轉(zhuǎn)(Inversion of Control,IOC)和依賴注入(Dependency Injection,DI)功能。
- spring-beans:提供了BeanFactory,是工廠模式的一個(gè)經(jīng)典實(shí)現(xiàn),Spring將管理對(duì)象稱為Bean。
- spring-context:給spring提供一個(gè)運(yùn)行時(shí)環(huán)境,用以保存各個(gè)對(duì)象的狀態(tài)。
- spring-expression:spring表達(dá)式語言。
AOP模塊
- spring-aop:是 Spring 的另一個(gè)核心模塊,提供了一個(gè)符合 AOP 要求的面向切面的編程實(shí)現(xiàn)。以動(dòng)態(tài)代理技術(shù)為基礎(chǔ),允許定義方法攔截器和切入點(diǎn),將代碼按照功能進(jìn)行分離,以便干凈地解耦。
- spring-aspects:提供了與AspectJ的集成功能,AspectJ是一個(gè)功能強(qiáng)大且成熟的AOP框架。
數(shù)據(jù)訪問及集成
- spring-jdbc:提供了一個(gè)JDBC的抽象層, 用于簡(jiǎn)化JDBC。主要是提供 JDBC 模板方式、 關(guān)系數(shù)據(jù)庫對(duì)象化方式, 主要實(shí)現(xiàn)類是 JdbcTemplate、 SimpleJdbcTemplate。
- spring-tx:事務(wù)控制,通過它的AOP配置,可以靈活的配置在任何一層,但是在很多的需求和應(yīng)用,直接使用JDBC事務(wù)控制還是有其優(yōu)勢(shì)的。
- spring-orm:對(duì)象關(guān)系映射,集成orm框架,主要集成Hibernate、Java Persistence API(JPA)和Java Data Object(JDO)用于資源管理、數(shù)據(jù)訪問對(duì)象(DAO)的實(shí)現(xiàn)和事務(wù)策略。
- spring-oxm:對(duì)象xml映射,OXM是Object to XML Mapping的縮寫,例如:jaxb, castor xmlbeans,JiBx,XStream等。
- spring-tx 模塊:事務(wù)模塊,支持用于實(shí)現(xiàn)特殊接口和所有POJO(普通Java對(duì)象)類的編程和聲明式事務(wù)管理。
Web
spring-web:提供最基礎(chǔ)的web支持,主要建立在核心容器上,通過Servlet或者Listener來初始化IOC容器,也包括一些與Web相關(guān)的支持。
spring-webmvc:實(shí)現(xiàn)了Spring MVC的Web應(yīng)用
spring-websocket:Spring4.0以后新增的模塊,實(shí)現(xiàn)雙工異步通訊協(xié)議,實(shí)現(xiàn)了WebSocket和SocketJS,提供Socket通信和web端的推送功能。
Test
- spring-test 模塊主要為測(cè)試提供支持的,支持使用JUnit或TestNG對(duì)Spring組件進(jìn)行單元測(cè)試和集成測(cè)試。
2. Spring有哪些優(yōu)勢(shì)?
-
方便解耦,簡(jiǎn)化開發(fā)
通過 Spring 提供的 IoC 容器,可以將對(duì)象間的依賴關(guān)系交由 Spring 進(jìn)行控制,降低了程序之間的耦合度。 -
AOP編程的支持
通過 Spring 的 AOP 功能,方便進(jìn)行面向切面的編程,實(shí)現(xiàn)了傳統(tǒng)OOP不能實(shí)現(xiàn)的功能。 -
聲明式事務(wù)的支持
通過聲明式方式靈活的進(jìn)行事務(wù)的管理,提高開發(fā)效率和質(zhì)量。 -
方便程序的測(cè)試
可以用非容器依賴的編程方式進(jìn)行幾乎所有的測(cè)試工作,測(cè)試不再是昂貴的操作,而是隨手可做的事情。 -
方便集成各種優(yōu)秀框架
Spring 可以降低各種框架的使用難度,提供了對(duì)各種優(yōu)秀框架(Struts、Hibernate、Quartz等)的直接支持。 -
降低 JavaEE API 的使用難度
Spring 對(duì) JavaEE API(如 JDBC、JavaMail等)進(jìn)行了封裝,使這些 API 的使用難度大為降低。