Spring Framework入門介紹


Spring是什么

  是一個開源框架,為了解決企業應用開發的復雜性而創建的,

  是一個輕量級的控制反轉和面向切面的容器框架

Spring Framework Runtime

    

  

Spring作用

  容器

  提供了對多種技術的支持

    JMS、MQ、UnitTest

  AOP(事務管理、日志等)

  提供了眾多方便應用的輔助類

  對主流框架提供良好的支持

什么是框架

  通常指的是為了實現某個業界標准或完成特定基本任務的軟件組件規范,也指為了實現某個軟件組件規范時,提供規范所要求之基礎功能的軟件產品

框架的特點

  半成品、封裝了特定的處理流程和控制邏輯、成熟

框架與類庫的區別

  框架一般是封裝了邏輯、高內聚的,類庫則是松散的工具組合

  框架專注於某一領域,類庫則是更通用

IOC

  接口及面向接口編程

    接口

      1、用於溝通的中介物的抽象化

      2、實體把自己提供給外界的一種抽象化說明,用以由內部操作分離出外部溝通方法,使其能被修改而不影響外界其他實體與其交互方式

      3、對應Java接口即聲明,聲明了哪些方法是對外公開提供的

      4、在Java8中,接口可以擁有方法體

    面向接口編程

      1、結構設計中,分清層次及調用關系,每層只向外(上層)提供一組功能接口,各層間僅依賴接口而非實現類

      2、接口實現的變動不影響各層間的調用,這一點在公共服務中尤為重要

      3、“面向接口編程”中的“接口”是用於隱藏具體實現和實現多態的組件    

  什么是IOC

    IOC:控制反轉,控制權的轉移,應用程序本身並不負責依賴對象的創建和維護,而是由外部容器負責創建和維護

    DI是其一種實現方式

    目的:創建對象並且組裝對象之間的關系

             

   Spring的bean配置

      xml、注解

   Bean容器初始化

      基礎:兩個bao

         org.springframework.beans

         org.springframework.context

         BeanFactory提供配置結構和基本功能,加載並初始化Beam

           ApplicationContext保存了Bean對象並在Spring中被廣泛使用

      方式:ApplicationContext

        本地文件

        Classpath

        Web應用中依賴servlet或Listener

    Spring注入

    是指在啟動Spring容器加載bean配置的時候,完成對變量的賦值行為

    常用的兩種注入方式

      設置注入

        

      構造注入

        

Spring bean裝配之Bean的配置項及作用域

  bean的配置項

    id:唯一標示

    class:實例化類

    scope:作用域

    Constructor arguments:構造器參數

    properties:屬性

    Autowiring mode:自動裝配模式

    lazy-intialization mode:懶加載模式

    Initialization/destruction method:初始化和銷毀

  bean的作用域

    singletion(默認模式):單例,指在一個bean容器中只存在一個

    prototype:每次請求創建新的實例,destroy方式不生效

    request:每次htto請求創建一個實例且僅在當前request有效

    session:與request相似,在當前session內有效

    global session:基於portlet的web中有效 

  bean的生命周期

    定義:通過xml,annotation

    初始化:

      實現org.springframework.beans.factory.InitializingBean接口,實現afterPropertiesSet方法

        

 

      配置init-method

        

    銷毀

       實現org.springframework.beans.factory.DisposableBean接口,覆蓋destroy方法

                     

        配置destroy-method

                    

      配置全局默認初始化、銷毀方法

       

 

    注當三種方式同時使用時,默認的配置不生效,實現接口優先於配置

    Aware

      Spring中提供了一些以Aware結尾的接口實現了Aware接口的bean在被初始化之后,可以獲取相應資源

      通過Aware接口,可以對Spring相應資源進行造作

      為對Spring進行簡單的擴展提供了方便的入口

  bean的自動裝配

     No:不做任何操作

     byname:根據屬性名自動裝配,此選項將檢查容器並根據名字查找與屬性完全一致的bean,並將其與屬性自動裝配

     bytype:如果容器中存在一個與指定屬性類型相同的bean,那么將於該屬性自動裝配,如果存在多個該類型bean,那么拋出異常,並指出不能使用byType方式進行自動裝配,如果沒有找到相匹配的bean,則什么事都不發生

     Constructor:與byType方式類似,不同之處在於它應用於構造參數,如果容器中沒有找到與構造參數類型一致的bean,那么拋出異常

  Resources&

  

      針對資源文件的統一接口

      Resources

        UrlResources:URL對應的資源,根據一個URL地址即可構建

        ClassPathResources:獲取類路徑下的資源文件

        FileSystemResources:獲取文件系統里面的資源

        ServlrtContextResources:ServletContext封裝的資源,用於訪問ServletContext環境下的資源

        InputStreamResource:針對輸入流封裝的資源

        ByteArrayResource:針對於字節數組封裝的資源

    ResourceLoader

        對Resources加載,所有的ApplicationConeext都實現了Resources 

bean的定義及作用域的注解實現

    Classpath掃描與組件管理

    類的自動檢測與注冊Bean

      Spring可以自動檢測類並注冊Bean到ApplicationContext

    <context:annotation-config/>

    <context:component-sca base-packge="" />包含<context:annotation-config/>功能

      <context:include-filter type="" expression=""/>

      <context:exclude-filter type="" expression=""/>

      可以使用use-default-filters = “false”禁用自動發現與注冊

      type有:annotation、assignable、aspectj、regex、custom

    定義一個bean

      掃描過程中組件被自動檢測,那么Bean名稱是由BeanNameGenerator生成的(@Component、@Respository、@Service、@Controller都會有name屬性用於顯示設置Bean Name)

    @Scop   指定作用域,也可以自定義scop策略

    @Component

    @Respository

    @Service

    @Controller

    @Required:

        適用於setter方法

        這個注解僅僅表示,受影響的bean屬性必須在配置時被填充,通過在bean定義或通過自動裝配一個明確的屬性值

    @Autowired

        可以用於setter方法

        可以用於構造器或成員變量

        每個類只能有一個構造器被標記為required=true

    @Qualifier

      按類型自動裝配可能多個bean實例的情況,可以使用此注解縮小范圍(或指定唯一),也可以用指定單獨的構造器參數或方法參數

      可用於注解集合類型變量

    @Resource:相當於 @Autowired + @Resource ,適用於成員變量、只有一個參數的setter方法

基於java容器的注解

    @Bean標識一個用於配置和初始化一個由SpringIoC容器管理的新對象的方法,類似於XML配置文件的<bean>,默認是單例的

    @Configration:標記為一個配置類

    @ImportResource:引入資源文件

    @Value:讀取配置文件中的值

基於泛型的自動裝配

Spring對JSR支持的說明

    @Resource

    @PostConstruct:初始化回調

    @PreDestroy:銷毀回調

    注:只有CommonAnnotationBeanPostProcessor是Spring的ApplicationContext中注冊的

JSR330標准注解

    需要依賴javax.inject包

    @Inject:等效與@Autowired

    @Named如果想使用特定名稱進行依賴注入,與Component等效

AOP

  意為面向切面編程,通過預編譯方式和運行期動態代理實現程序功能的統一維護的一種技術

  主要的功能:日志記錄,性能統計,安全控制,事務處理,異常處理等

  切面:橫切與各個功能之上的

    

  實現方式

    預編譯:AspectJ

    運行期動態代理(JDK、CGLIB):SpringAOP、JbossAOP

  相關概念

    

  Advice的類型

    

  Spring框架中AOP的用途

    提供了聲明式的企業服務,特別是EJB的替代服務的聲明

    允許用戶定制自己的方面,以完成OOP與AOP的互補使用

  Spring的AOP實現

    純java實現,無需特殊的編譯過程,不需要控制類加載器層次

    目前只支持方法執行連接點

    不是為了提供最完整的AOP,而是側重於一種AOP實現和Spring IoC容器之間的整合,用於幫助解決企業應用中的常見問題

    Spring AOP不會與AspectJ競爭,從而提供全面的AOP解決方案

  有接口和無接口的SpringAOP實現區別

    Spring AOP默認使用標准的JavaSE動態代理作為AOP代理,這使得任何接口都可以被代理

    Spring AOP中也可以使用CGLIB代理

  Schema-based AOP

    Spring所有的切面和通知都必須放在<aop:config>內(可以配置包含多個<aop:config>元素),每個<aop:config>可以包含pointcut、dvisor和aspect

    注:必須按照這個順序進行聲明

    <aop:config>大量使用了Spring代理的機制

        

    pointcut

      execution(public * *(..))   切入點為執行所有public方法時

      execution(* set*(..))  切入點為執行所有set開始的方法時

      execution(* com.**.*.*(..))  切入點為某個類中的所有方法時

      execution(* com..(..))    切入點為執行某個包下的所有方法時

      exection(* com...(..))    切入點為執行某個包及其子包下的所有方法時

      

      within(com.*)(only in Spring AOP)

      within(com..*)(only in Spring AOP)

           within用於匹配指定類型內的方法執行

      this(com.fg.TestServer)(only in Spring AOP)this用於匹配當前AOP代理對象類型的執行方法

    advice

      Before advice

          

      After returning advice

          

      After throwing advice

          

      使用throwing屬性來指定可被傳遞的異常的參數名稱

          

 

      After(finally)advice

          

 

      Around advice:通知方法的第一個參數必須是ProceedingJoinPoint類型

          

      Advice parameters

          

    Introductions

      簡介允許一個切面聲明一個實現指定接口的通知對象,並且提供了一個接口實現類來代表這些對象

       由<aop:aspect>中的<aop:declare-parents>元素聲明該元素用於聲明所匹配的類型擁有一個新的parent

      

    advisors

      就像一個小的自包含的方面,只有一個advice

      切面自身通過一個bean表示,並且必須實現某個advice接口,同時,advisor也可以很好的利用AspectJ的切入點表達式

      大多數會與transaction adcice配合使用

      可以使用order屬性定義順序

      

Spring AOP API

    Pointcut

      實現之一:NameMatchMethodPintcut,根據方法名進行匹配

      成員變量:mappedNames,匹配的方法名集合

          

         

ProxyFactoryBean

    

 


免責聲明!

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



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