Spring Framework入門介紹

Spring是什麼java

  是一個開源框架,爲了解決企業應用開發的複雜性而建立的,web

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

Spring Framework Runtimeexpress

    

  

Spring做用編程

  容器數組

  提供了對多種技術的支持安全

    JMS、MQ、UnitTestsession

  AOP(事務管理、日誌等)app

  提供了衆多方便應用的輔助類框架

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

什麼是框架

  一般指的是爲了實現某個業界標準或完成特定基本任務的軟件組件規範,也指爲了實現某個軟件組件規範時,提供規範所要求之基礎功能的軟件產品

框架的特色

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

框架與類庫的區別

  框架通常是封裝了邏輯、高內聚的,類庫則是鬆散的工具組合

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

IOC

  接口及面向接口編程

    接口

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

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

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

      四、在Java8中,接口能夠擁有方法體

    面向接口編程

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

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

      三、「面向接口編程」中的「接口」是用於隱藏具體實現和實現多態的組件    

  什麼是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

相關文章
相關標籤/搜索