Spring學習筆記 Part.01

Hibernate的做用:
  1.能夠解決以面向對象的方式操做數據庫的問題
   請求參數(String)→Strut2→Action(對象)→業務邏輯組件(面向對象)
  2.因此任何一個ORM框架均可以代替Hibernate,JPA更加能夠;
Spring能作什麼?
  A.解決各層組件之間的硬編碼耦合(類名的直接耦合)
   可讓各組件之間以「面向接口」的方式編程,從而提供更好的可擴展性
  B.能解決事務、權限檢查等這種具備通用性質、橫切性質的處理邏輯
  C.Spring提供了對大部分操做的簡化功能
   Spring再次簡化了開發者的工做量程序員

  兩大功能:
   - 提升程序的可擴展性、可維護性
   - 能夠提升程序員的開發效率數據庫

==============解決各組件之間的硬編碼耦合(類名的直接耦合)==============
  1.讓各組件之間面向接口編程;
  2.程序員還須要本身寫一個工廠,組件經過工廠去主動獲取它所依賴的組件
Spring是什麼?
  Spring是大工廠,全部的Java對象均可由它來產生,它是全部對象的工廠,超級工廠
  Spring的安裝:
   (1)導入Spring Jar包
   (2)增長一個Spring配置文件
   (3)獲取Spring容器(Spring工廠),再經過工廠去獲取工廠中的產品編程

Spring容器(超級工廠)
  1.                BeanFactory
                AppicationContext
    CassPathXmlApplicationContext   FileSystemXmlApplicationContext
  A組件,須要去調用B組件的方法
   - 稱爲A組件依賴B組件數組


  - 傳統模式下: A組件主動去建立B組件
  - 工廠模式下: A組件調用B組件的工廠去獲取B組件
  - Spring模式下: A組件只要爲B組件提供一個setter方法便可,而後在Spring配置文件中配置便可網絡

Spring的本質:
  經過XML配置來驅動Java代碼
  Spring用的熟,幾乎全部Java代碼都放在XML去配置
  要求:眼中看到的XML配置,心中想的是執行的Java代碼session

 

ApplicationContext多BeanFactory的以下功能:
  A.國際化支持
  B.支持資源(來自磁盤、網絡、IO流、Web應用的文件或數據)訪問
  C.加載多個配置文件
  D.事件支持

  每一個Bean除了可擁有id以外,還能夠擁有不少個別名(外號)框架


 /**************************************************
  Spring是一個超級大工廠
  對Spring來講:一切都是Bean
  即便構造器私有(用private修飾),Spring依然能夠建立Bean的實例
 **************************************************/編碼


Bean的做用域:
  singleton - 當ApplictionContext初始化時,容器會自動初始化全部singleton Bean
  每次程序向Spring容器請求時,Spring容器老是返回最開始建立的singleton Bean
  prototype- 每次程序向Spring容器請求時,Spring容器會臨時去建立prototype Bean
  request - 要在Web應用纔有效。每一個用戶請求,Spring建立一個Bean實例
  request - 要在Web應用纔有效。每一個用戶會話,Spring都只建立一個Bean實例
  global session -在portlet context纔有效
 /******************************************************************
 W3C推薦:
  XML文檔應該多用於子元素,少用屬性。
  <user name="孫悟空" address="花果山"/>
  與下面方式對比
  <user>
    <name>孫悟空</name>
    <address>花果山</address>
  <user>
  能夠擴展
  <user>
    <name>
      <first>悟空</first>
      <last>孫</last>
    </name>
    <address>
      <detail>花果山</detail>
      <zip>5423423</zip>
    </address>
  <user>
  W3C告訴咱們:應該多用子元素,儘可能少用屬性,子元素是擴展性更好
 ******************************************************************/prototype

  不管是<property .../>(調用setter方法)仍是<constructor-arg.../>(有參數的構造器)
=================須要傳入各類類型的實參=================
  1.基本類型及其包裝類、String、Date等標量類型。用value屬性或value子元素傳入值
  2.自定義類。須要ref或嵌套Bean傳入值
  3.List、Set、數組、Map等集合對象

==============嵌套Bean==============
  嵌套Bean不是直接定義雜<beans.../>元素中,而是定義在<property.../>或<constructor-arg.../>裏
  結論:嵌套Bean與外層的Bean的配置幾乎徹底同樣的。
  只是嵌套Bean不須要id,Spring容器不能直接訪問。嵌套Bean是做爲setter方法、構造器的參數值;
==============注入集合屬性==============
  list 元素負責建立List集合和數組
  map元素負責建立Map集合
  set元素負責建立Set集合
  props元素負責建立Properties集合

================依賴檢查================
  它不會產生實際的影響,它會對配置文件進行語法層次的檢查
  強制要求必須爲setter方法配置合適的依賴注入
  在有些時候,程序員可能因爲某些失誤,致使配置文件出錯,或漏了配置

 

========實例化Bean的3種方式========
  1.調用構造器來建立Bean
  2.調用工廠類的靜態工廠方法
  3.調用實例工廠的實例工廠方法

  不管是靜態工廠方法,仍是實例工廠方法,都須要增長一個factory-method屬性
   實例工廠方法,還須要指定factory-bean屬性

  /*******************************

  今天的要點:
    1.建立對象的3種方式
    2.如何控制它調用有參數的構造器
    3.如何控制執行的setter方法
    4.如何爲setter方法/構造器傳入參數值

  *******************************/

 

 

==========FactoryBean==========
  它是一個接口,接口裏有3個方法:getObject()、getObjectType()、isSingleton();
  若是一個Bean實現了該接口,並在容器中配置了該Bean,接下來程序獲取該Bean的時候,實際上返回的只是該Bean的getObject方法的返回值。

  因爲getObject()方法由程序員本身實現,所以咱們想在這個方法裏作什麼就能夠作什麼。

==========BeanNameAware==========
若是MyBean實現了BeanNameAware接口
Spring建立該Bean以後,會當即、自動調用它的setBeanName方法
經過BeanNameAware接口,保證咱們在首先Bean類時,就能夠得到配置該Bean時指定id

==========Bean的生命週期==========
  Bean有4個做用域:singleton prototype request session
  對於singleton做用域的Bean,Spring會負責管理它的生命週期
  singleton Bean與Spring容器的生存期限是相同的

  Spring建立Bean實例以後,會當即調用它的對應的setter方法

  1.Bean設值注入以後,添加本身的處理代碼
   A.讓Bean實現InitializingBean
   B.直接用init-method屬性來指定初始化方法
    --這兩種機制,只要使用一種便可;

  2.Bean銷燬以前
   A.讓Bean實現DisposableBean
   B.直接用destroy-method屬性來指定銷燬以前的方法
    --這兩種機制,只要使用一種便可;

 

  *******Bean生命週期行爲*******

         建立實例 → 注入依賴關係                    ↓  Bean初始化過程   |  調用afterPropertiesSet               |       ↓             |   調用init-method方法                    ↓                 對外提供服務                    ↓  Bean銷燬以前的行爲 |     調用destroy             |        ↓             |  調用destroy-method方法    →    Bean實例被銷燬

相關文章
相關標籤/搜索