spring框架的總結


  大家好,相信Java高級工程師對spring框架都很了解吧!那么我以個人的觀點總結一下spring,希望大家有所幫助。

一、內容綱要

  1、spring的起源和背景

  2、spring簡介

  3、spring的核心模塊

  4、springIOC和AOP

  5、為什么要使用spring

  6、spring的目的?意義?

  7、spring的優缺點

  8、spring帶給我們什么

  9、spring能做什么

二、具體內容

  1、spring的起源和背景

  Rod Johson在2002年編著的《Expert one to one J2EE design and development》一書中,對Java EE正統框架臃腫、低效、脫離現實的種種現狀提出了質疑,並積極尋求探索革新之道。以此書為指導思想,他編寫了interface21框架,這是一個力圖沖破Java EE傳統開發的困境,從實際需求出發,着眼於輕便、靈巧,易於開發、測試和部署的輕量級開發框架。Spring框架即以interface21框架為基礎,經過重新設計,並不斷豐富其內涵,於2004年3月24日,發布了1.0正式版。

  Spring致力於J2EE應用的各層的解決方案,而不是僅僅專注於某一層的方案。可以說Spring是企業應用開發的“一站式”選擇,並貫穿表現層、業務層及持久層。然而,Spring並不想取代那些已有的框架,而與它們無縫地整合。

  spring的設計目標:遵循一系列的接口標准,這樣的好處是只需要簡單的Java對象或者Javabean就能進行Java EE開發,這樣開發的入門、測試、應用部署都得到了簡化。

  2、spring簡介

  Spring是一個開源的用於簡化采用Java語言開發企業級程序的一個分層的框架。

Spring是一個開源框架,它由Rod Johnson創建。它是為了解決企業應用開發的復雜性而創建的。Spring使用基本的JavaBean來完成以前只可能由EJB完成的事情。然而,Spring的用途不僅限於服務器端的開發。從簡單性、可測試性和松耦合的角度而言,任何Java應用都可以從Spring中受益。

  3、spring的核心模塊

   Spring 框架是一個分層架構,由 7 個定義良好的模塊組成。Spring 模塊構建在核心容器之上,核心容器定義了創建、配置和管理 bean 的方式,組成 Spring 框架的每個模塊(或組件)都可以單獨存在,或者與其他一個或多個模塊聯合實現。每個模塊的功能如下:

   

       1)Spring Core:核心容器,BeanFactory提供了組件生命周期的管理,組件的創建,裝配,銷毀等功能

    SpringContext:ApplicationContext,擴展核心容器,提供事件處理、國際化等功能。它提供了一些企業級服務的功能,提供了JNDI,EJB,RMI的支持。

       2) Spring AOP:提供切面支持

       3) Spring DAO:提供事務支持,JDBC,DAO支持

       4) Spring ORM:對流行的O/R Mapping封裝或支持

       5) Spring Web:提供Web應用上下文,對Web開發提供功能上的支持,如請求,表單,異常等。

       6) Spring Web MVC:全功能MVC框架,作用等同於Struts。

     7)核心容器:核心容器提供 Spring 框架的基本功能。核心容器的主要組件是 BeanFactory,它是工廠模式的實現。BeanFactory 使用控制反轉 (IOC)模式將應用程序的配置和依賴性規范與實際的應用程序代碼分開。

  4、springIOC和AOP

      

    4、1、IoC的概念

    IoC,Inversion of Control,控制反轉。

      對象的協作關系由對象自己負責。

      依賴注入:對象的協作關系有容器來建立。

    4、2、IoC的類型

      (1) 基於特定接口(侵入式方案)

      (2) 基於set方法

      (3) 基於構造器

    4、3、Spring容器

      Spring容器負責生成、組裝、銷毀組件,並負責事件處理、國際化等功能。

      (1) BeanFactory<interface>

        ① 核心容器,負責組件生成和裝配

        ② 實現主要包括Xml BeanFactory

      (2) ApplicationContext

      (3) WebApplicationContext

      (4) ……

    4、4、IoC的使用

      Resource:interface,用來包裝資源

      xmlBeanFactory:BeanFactory的一個實現,使用Resource對象來查找配置文件

      BeanFactory.gerBean(“BeanId”):取得以參數命名,或者Id等於參數值的一個Bean實例。

      BeanFactory(容器)在默認情況下,會采用單例方式返回對象。容器只到調用getBean方法時,才會實例化某個對象。

      (1) Spring可以采用XML或者.properties文件作配置

      (2) 配置文件(XML)

        根元素<beans>可以有多個<bean>子元素,每個<bean>代表一個需要裝配的對象。

    1、setter注入

      (1) 注入簡單屬性(String和8中基本類型)

        <beans>

            <bean id=”BeanId” class=”classpath” autowire=” ” dependency-check=” ”>

              <property name=”parameterName”>

                <value>parameterValue</value>

              </property>

            </bean>

        </beans>

      對於基本類型,Spring容器會自動作類型轉換,以便賦值。

    (2) 注入對象

      <bean>

        <ref local=”BeanId”>

      </bean>

      A、讓Spring容器在當前配置文件中找到相應的Bean,並調用set方法,注入該Bean。

      B、將一個Bean的定義嵌套在另一個Bean中(可讀性差),被嵌套的Bean不能采用getBean()返回

      C、采用<ref bean=” ”>搜索多個配置文件來注入

      (3) 注入集合類型

        ① Set

          Set中存放字符串,對象,集合,不允許重復

        ② List

          List中可以放入字符串,對象,List

        ③ Map

          Map 有<entry>子元素來存取key,value,key只能為String

        ④ Properties

          Properties有<props>子元素

 

 spring的AOP   

一、AOP(Aspect-oriented programming,面向切面編程):

  什么是AOP?

  定義:將程序中的交叉業務邏輯提取出來,稱之為切面。將這些切面動態織入到目標對象,然后生成一個代理對象的過程。

 

二、AOP核心概念

  1、Aspect(切面)

  切面,是對交叉業務邏輯的統稱。

  2、Joinpoint(連接點)

  連接點,指切面可以織入到目標對象的位置(方法,屬性等)。

  3、Advice(通知)

  通知,指切面的具體實現。

  4、Pointcut(切入點)

  切入點,指通知應用到哪些類的哪些方法或屬性之上的規則。

  5、Introduction(引入)

  引入,指動態地給一個對象增加方法或屬性的一種特殊的通知。

  6、Weaving(織入)

  織入,指將通知插入到目標對象。

  7、Target(目標對象)

  目標對象,指需要織入切面的對象。

  8、Proxy(代理對象)

  代理對象,指切面織入目標對象之后形成的對象。

 

三、Spring AOP原理

  采用動態代理模式。

 

  Spring AOP采用動態代理的過程:

(1) 將切面使用動態代理的方式動態織入到目標對象(被代理類),形成一個代理對象;

(2) 目標對象如果沒有實現代理接口,那么Spring會采用CGLib來生成代理對象,該代理對象是目標對象的子類;

(3) 目標對象如果是final類,並且也沒實現代理接口,就不能運用AOP。

 

四、Spring的通知

1、Spring的通知類型

(1) MethodBeforeAdvice

  類全名:org.springframework.aop.MethodBeforeAdvice

  在方法調用之前,做處理。

  不能夠改變返回值

  不能夠改變目標方法的流程,也不能中斷流程的處理過程(除非拋出異常)

(2) AfterReturningAdvice

  類全名:org.springframework.aop.AfterReturningAdvice  

在方法調用之后,做處理。

  不能夠改變返回值

  不能夠改變目標方法的流程,也不能中斷流程的處理過程(除非拋出異常)

(3) MethodInterceptor

  類全名:org.aopalliance.intercept.MethodInterceptor

在方法調用之前以及之后,做處理。

  可以改變返回值,也可以改變流程。

(4) ThrowsAdvice

  類全名:org.springframework.aop.ThrowsAdvice

在方法拋出異常后,做處理。

  當該通知處理完異常后,會簡單地將異常再次拋出給目標調用方法。

 

2、配置過程:

  (1)配置目標對象

  (2)配置通知

  (3)利用ProxyFactoryBean將通知織入到目標對象,形成一個動態代理對象

  (4)客戶端使用動態代理來訪問目標對象的方法。

 

  在默認情況下,通知會應用到所有的方法之上。

Pointcut:

根據方法和類決定在什么地方織入通知

  Advisor:

  將Pointcut與Advice結合到一起。

 

  5、為什么要使用spring

      因為只要是OOP開發的應用,都是由對象與對象之間進行協作進行工作的,那么對象與對象之間的關系管理(依賴關系)如果需要自己用代碼進行維護很麻煩。用了Spring就可以省去這麻煩的工作了

  

    Spring是獨特的,因為若干個原因:

      ◆它定位的領域是許多其他流行的framework沒有的。Spring關注提供一種方法管理你的業務對象。

      ◆ Spring是全面的和模塊化的。Spring有分層的體系結構,這意味着你能選擇使用它孤立的任何部分,它的架構仍然是內在穩定的。因此從你的學習中,你可得到最大的價值。例如,你可能選擇僅僅使用Spring來簡單化JDBC的使用,或用來管理所有的業務對象。

      ◆它的設計從底部幫助你編寫易於測試的代碼。Spring是用於測試驅動工程的理想的framework。

Spring對你的工程來說,它不需要一個以上的framework。Spring是潛在地一站式解決方案,定位於與典型應用相關的大部分基礎結構。它也涉及到其他framework沒有考慮到的內容。

  6、spring的目的?意義?

      ◆目的:解決企業應用開發的復雜性

      ◆功能:使用基本的JavaBean代替EJB,並提供了更多的企業應用功能

      ◆范圍:任何Java應用

      意義:1,降低開發成本.2,方便使用.

  7、spring的優缺點

    7.1. 提供了一種管理對象的方法,可以把中間層對象有效地組織起來。一個完美的框架“黏合劑”。

    7.2. 采用了分層結構,可以增量引入到項目中。

    7.3. 有利於面向接口編程習慣的養成。

    7.4. 目的之一是為了寫出易於測試的代碼。

    7.5. 非侵入性,應用程序對Spring API的依賴可以減至最小限度。

    7.6. 一致的數據訪問介面。

    7.7. 一個輕量級的架構解決方案。

    7.8缺點:目前不支持集群

  8、spring帶給我們什么

    ◆方便解耦,簡化開發

    通過Spring提供的IoC容器,我們可以將對象之間的依賴關系交由Spring進行控制,避免硬編碼所造成的過度程序耦合。有了Spring,用戶不必再為單實例模式類、屬性文件解析等這些很底層的需求編寫代碼,可以更專注於上層的應用。

    ◆AOP編程的支持

    通過Spring提供的AOP功能,方便進行面向切面的編程,許多不容易用傳統OOP實現的功能可以通過AOP輕松應付。

    ◆聲明式事務的支持

    在Spring中,我們可以從單調煩悶的事務管理代碼中解脫出來,通過聲明式方式靈活地進行事務的管理,提高開發效率和質量。

    ◆方便程序的測試

    可以用非容器依賴的編程方式進行幾乎所有的測試工作,在Spring里,測試不再是昂貴的操作,而是隨手可做的事情。

    ◆方便集成各種優秀框架

    Spring不排斥各種優秀的開源框架,相反,Spring可以降低各種框架的使用難度,Spring提供了對各種優秀框架(如Struts,Hibernate、Hession、Quartz)等的直接支持。

    ◆降低Java EE API的使用難度

    Spring對很多難用的Java EE API(如JDBC,JavaMail,遠程調用等)提供了一個薄薄的封裝層,通過Spring的簡易封裝,這些Java EE API的使用難度大為降低。

    ◆Java 源碼是經典學習范例

  9、spring能做什么

    Spring的主要目的是使J2EE易用和促進好編程習慣。

    Spring的目標是使已存在的技術更加易用。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM