Spring總結-1

Spring總覽

企業級應用

  • 大規模:用戶數量多、數據規模大、功能衆多
  • 性能和安全要求高
  • 業務複雜
  • 靈活應變

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的設計理念

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>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章