企業級應用
- 大規模:用戶數量多、數據規模大、功能衆多
- 性能和安全要求高
- 業務複雜
- 靈活應變
Spring 簡介
輕量級框架, Java EE的春天,當前主流框架
- 目標:
- 使現有技術更加易用,
- 推進編碼最佳實踐
- 原則:不重新發明輪子
- 內容:
- IoC容器
- AOP實現
數據訪問支持
- 簡化JDBC/ORM 框架
- 聲明式事務
Web集成
Spring體系結構
Spring框架由大約20個功能模塊組成,這些模塊被分成六個部分,分別是Core Container、Data Access/Integration、Web、AOP(Aspect Oriented Programming)、Instrumentation及Test,如下圖示。
Spring的設計理念
Spring是面向Bean的編程
Spring 兩大核心技術
- 控制反轉(IoC:Inversion of Control ) /依賴注入(DI:Dependency Injection )
- 面向切面編程(AOP:Aspect Oriented Programming)
Spring loC
控制反轉(Inversion of Control,loC),也稱爲依賴注入(Dependency Injection ,DI),是面向對象編程中的一種設計理念,用來降低程序之間的耦合度。
什麼是依賴
依賴,在代碼中一般指通過局部變量、方法參數等建立的對於其他對象的調用關係。例如在A類的方法中,實例化了B類的對象並調用其方法以完成特定的功能,我們就說A類依賴B類。
loC的原理
控制反轉是Spring框架的核心。其原理是基於面向對象(OO)設計原則的The Hollywood Principle:Don’t call us, we’ll call you(別找我,我會來找你的)。也就是說,所有的組件都是被動的,所有的組件初始化和調用都由容器負責。組件處在一個容器當中,由容器負責管理。簡單的來講,就是由容器控制程序之間的關係,而非傳統實現中,由程序代碼直接操控,即在一個類中調用另外一個類。這也就是所謂“控制反轉”的概念所在:控制權由應用代碼中轉到了外部容器,控制權的轉移,即所謂反轉。
ps:如果想了解更多的Spring loC 的知識請點擊下面的地址:
http://blog.csdn.net/u012561176/article/details/45974315
Spring 的優點
- 低侵入式設計
- 獨立於各種應用服務器
- 依賴注入特性將組件關係透明化,降低了耦合度
- 面向切面編程特性允許將通用任務進行集中式處理
- 與第三方框架的良好整合
依賴注入
依賴注入即由容器(如Spring)負責把組件所“依賴”的具體對象“注入”(賦值)給組件,從而避免組件之間以硬編碼的方式耦合在一起。
依賴注入(DI)和控制反轉(IoC)是從不同的角度描述的同一件事情,就是指通過引入IoC容器,利用依賴關係注入的方式,實現對象之間的解耦。
Spring AOP
- 簡介:面向切面編程(Aspect Orient Programming,AOP)是軟件編程思想發展到一定階段的產物,是面向對象編程的有益補充。AOP一般適用於具有橫切邏輯的場合,如訪問控制、事務管理、性能檢測等。
- 作用:面向切面編程,簡單地說就是在不改變源程序的基礎上爲代碼段增加新的功能,對代碼進行增強處理。
- 基本概念:
- 切面(Aspect):一個模塊化的橫切邏輯(或稱橫切關注點),可能會橫切多個對象。
- 連接點(Join Point):程序執行中的某個具體的執行點。
- 增強處理:(Advice):切面在某個特定連接點上執行的代碼邏輯。
- 切入點(Pointcut):對連接點的特徵進行描述,可以使用正則表達式。增強處理和一個切入點表達式相關聯,並在與這個切入點匹配的某個連接點上運行。
- 目標對象(Target object):被一個或多個切面增強的對象。
- AOP代理(AOP proxy):由AOP框架所創建的對象,實現執行增強處理方法等功能。
- 織入(Weaving):將增強處理連接到應用程序的類型或對象的過程。
增強處理類型:在原對象的某方法之前插入的增強處理爲前置增強,該方法正常執行完以後插入的增強處理爲後置增強,此外還有環繞增強、異常拋出增強、最終增強等類型。
面向切面編程主要關心兩個問題:在什麼位置,執行什麼功能。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.2.xsd">
<bean id="dao" class="dao.impl.UserDaoImpl"></bean>
<bean id="service" class="service.impl.UserServiceImpl">
<property name="dao" ref="dao"></property>
</bean>
<!-- 聲明增強方法所在的Bean -->
<bean id="theLogger" class="aop.UserServiceLogger"></bean>
<!-- 配置切面 -->
<aop:config>
<!-- 定義切入點 -->
<aop:pointcut id="pointcut"
expression="execution(public void addNewUser(entity.User))" />
<!-- 引用包含增強方法的Bean -->
<aop:aspect ref="theLogger">
<!-- 將before()方法定義爲前置增強並引用pointcut切入點 -->
<aop:before method="before" pointcut-ref="pointcut"></aop:before>
<!-- 將afterReturning()方法定義爲後置增強並引用pointcut切入點 -->
<!-- 通過returning屬性指定爲名爲result的參數注入返回值 -->
<aop:after-returning method="afterReturning"
pointcut-ref="pointcut" returning="result" />
</aop:aspect>
</aop:config>
</beans>