Spring是一個分層的 full-stack(一站式)輕量級框架,以Ioc(Inversion of Control,控制反轉)和AOP(Aspect Oriented Programming,面向切片編程)為內核,使用簡單的JavaBean來完成以前只能由EJB(Enterprise Java Beans)完成的工作,取代了臃腫、低效的EJB。
Spring致力於JavaEE應用各層的解決方案,是企業應用一站式開發很好的選擇,在表現層它提供了Spring MVC以及整合Struts的功能,在業務邏輯層可以管理事務、記錄日志等,在持久層可以整合Hibernate、Mybatis等框架。雖然Spring貫穿表現層、業務邏輯層、持久層,但Spring並不是要取代那些已有的優秀框架,而是可以高度開放的與其它優秀框架無縫整合。
Spring的優點
1、非侵入式設計
Spring是一種非侵入式(no-invasive)框架,它可以使應用程序代碼對框架的依賴最小化。
2、方便解耦、簡化開發
Spring是一個大工廠,可以將所有 對象的創建、依賴關系的維護 交給Spring容器管理,大大降低了組建之間的耦合。
3、支持AOP
允許將一些通用任務,比如安全、事務、日志等,進行集中式管理,從而提高程序的復用性。
4、支持聲明式事務處理
通過配置就可以完成對事務的管理,無需手動編程。
5、方便整合其它優秀框架
Spring可以與大多數框架無縫整合。
6、測試方便
Spring支持Junit4,可通過注解測試程序,很方便。
7、降低了使用JavaEE API的難度
Spring對JavaEE開發中難用的一些API進行了封裝,降低了這些API的使用難度。
Spring的體系結構
1、Test模塊
提供對應用的單元測試、集成測試的支持
2、Core Container(核心容器)
Spring核心容器是其它模塊的基礎,主要由5個模塊組成:
- Beans模塊:提供BeanFactory,是工廠模式的經典實現,Spring將管理的對象稱為Bean。
- Core 核心模塊:是Spring框架的基本組成部分,提供Ioc、DI功能。
- Context 上下文模塊:建立在Beans、Core模塊的基礎上,可以通過它來訪問任何對象的定義、配置。Context模塊最重要的是ApplicationContext接口。
- Context-support 模塊:提供Spring對嵌入第三方庫的支持,比如要嵌入緩存(Jcache、EhCache)、郵件服務(JavaMail)、任務調度(CommonJ、Quartz)這些第三方功能,就要用到此模塊。
- SpEL模塊:提供對Spring Expression Language的支持。
3、
- AOP模塊:提供對面向切片編程的支持,允許定義方法攔截器和切入點,將代碼按照功能分離,以降低耦合。
- Aspects模塊:提供對整合Aspects框架的支持,Aspects是一個優秀的AOP(面向切片編程)框架。
- Instrumentation模塊:提供對類工具、類加載器的支持/實現。
- Messaging模塊:提供對消息傳遞體系的支持。
4、Data Access/Integration(數據訪問/集成)
- JDBC模塊:是JDBC的抽象,大幅減少了對數據庫的編碼。
- ORM模塊:封裝了大量的對象關系映射的API,提供對JPA、JDO、Hibernate的整合支持。
- OXM模塊:提供了一個支持對象/XML映射的抽象層實現,比如XMLBeans、XStream。
- JMS模塊:提供對消息傳遞服務的支持。
- Transactions 事務模塊:提供對POJO編程、聲明式事務管理的支持。
5、Web
- WebSocket模塊:提供WebScoket、SockJS的實現,以及對STOMP的支持
- Servlet模塊:也稱為Spring-webmvc模塊,包含了Spring的MVC。
- Web模塊:提供基本的Web開發集成特性,比如多文件上傳功能、使用Servlet監聽器來初始化Ioc容器以及Web應用上下文。
- Portlet模塊:提供了對在Portlet環境中使用MVC的支持。
Spring中的Bean
Spring容器負責創建、管理Bean的實例,所有的類都可以作為Bean。
傳統的JavaBean一般是作為DTO(數據傳輸對象),用來封裝值對象,在各層之間傳遞數據。Spring Bean可以是任何組件,用途廣泛。
傳統的JavaBean要求為每一個成員變量提添加setter、getter方法。Spring Bean則無此要求,但盡量為Bean寫一個無參的構造函數(不強制)。