Spring是一種多層的J2EE應用程序框架,其核心就是管理資源組件以及依賴關係,Spring框架爲現代基於java的企業應用程序提供了一個全面的編程和配置模型。java
Core Container包含了spring-core, spring-beans, spring-context, spring-context-support, spring-expression (Spring Expression Language) 模塊,spring-core和spring-beans模塊提供了框架的基本部分,包括IoC(控制反轉)和DI(依賴項注入)特性。Context模塊模構建於Core和Beans模塊基礎之上,提供了一種相似JNDI註冊器的框架式的對象訪問方法;Context 模塊繼承了Beans的特性,爲 Spring 核心提供了大量擴展,添加了對國際化(例如資源綁定)、事件傳播、資源加載和對Context的透明建立的支持。Context模塊同時也支持J2EE的一些特性,ApplicationContext接口是Context模塊的關鍵;SpEL模塊提供了強大的表達式語言,用於在運行時查詢和操縱對象。web
spring-aop模塊提供了一個AOP規範的面向切面的編程方式,容許您定義方法攔截器和切入點,以便處理一些橫切性問題,好比日誌,權限,數據驗證,監控性能等。Aspects模塊提供了對AspectJ的支持;Instrumentation模塊提供了class instrumentation支持和classloader實現,使用 Instrumentation,開發者能夠構建一個獨立於應用程序的代理程序(Agent),用來監測和協助運行在 JVM 上的程序,甚至可以替換和修改某些類的定義。有了這樣的功能,開發者就能夠實現更爲靈活的運行時虛擬機監控和Java類操做了,這樣的特性實際上提供了一種虛擬機級別支持的 AOP 實現方式(這塊涉及到javaagent後續章節介紹)。spring
Spring消息模塊,其中包含來自Spring集成項目的關鍵抽象,如Message、MessageChannel、MessageHandler等,能夠做爲基於消息的應用程序的基礎。數據庫
Data Access/Integration包含了JDBC, ORM, OXM, JMS, 和Transaction模塊,spring-jdbc模塊提供了一個JDBC抽象層,消除了對特定於數據庫供應商的錯誤代碼進行冗長的JDBC編碼和解析的須要;spring-tx模塊支持對實現特殊接口的類和全部pojo的編程和聲明性事務管理;spring-orm模塊爲目前流行的對象關係映射api(包括JPA和Hibernate)提供集成層。使用spring-orm模塊,您能夠將全部這些ORM映射框架與Spring提供的全部其餘特性結合使用,好比前面提到的簡單聲明性事務管理特性;spring-oxm模塊提供了一個抽象層,支持對象/XML映射實現,如JAXB、Castor、XMLBeans、JiBX和XStream;spring-jms模塊(Java消息傳遞服務)包含用於生成和消費消息的特性。express
Web層由spring-web、spring-webmvc、spring-websocket和spring-webmvc-portlet模塊組成,spring-web模塊提供了基本的面向web的集成特性,好比多部分文件上傳功能,以及使用Servlet偵聽器和麪向web的應用程序上下文初始化IoC容器;Spring -webmvc模塊(也稱爲Web- servlet模塊)包含Spring的模型-視圖-控制器(MVC)和Web應用程序的Rest Web服務實現;spring-webmvc- Portlet模塊(也稱爲Web-Portlet模塊)提供了要在Portlet環境中使用的MVC實現,並反映了基於servlet的spring-webmvc模塊的功能。編程
Spring -test模塊支持使用JUnit或TestNG對Spring組件進行單元測試和集成測試。它提供了Spring applicationcontext的一致加載和這些上下文的緩存。它還提供了模擬對象,您可使用這些對象獨立寫單元測試代碼api
核心就是管理資源組件及其依賴關係。包括IoC(Inversion of Control 控制反轉)/ DI (Dependency Injection依賴注入),Aop(Aspect Oriented Programming面向切面編程)。緩存
IoC(Inversion of Control 控制反轉):資源(組件)再也不由使用資源雙方進行管理,而是由不使用資源的第三方統一管理,這樣帶來的好處。第一,資源的集中管理,實現資源的可配置和易管理。第二,下降了使用資源雙方的依賴程度,也就是咱們說的耦合度websocket
Aop(Aspect Oriented Programming面向切面編程):咱們知道OOP(面向對象編程)針對業務處理過程的實體及其屬性和行爲進行抽象封裝,以得到更加清晰高效的邏輯單元劃分,若是在應用開發過程當中,若是產生橫切性問題,好比日誌記錄,權限驗證,監控性能等,這個時候AOP就上場了,AOP是經過預編譯方式或者運行期動態代理實現的一種方式,AOP能夠對業務邏輯的各個部分進行隔離,從而使得業務邏輯各部分之間的耦合度下降,提升程序的可重用性,同時提升了開發的效率。mvc