Spring知識點總結大全(1)


1.Spring的分層結構

  1、Presentation layer(表示層)

    (1) 表示邏輯(生成界面代碼)

    (2) 接收請求

    (3) 處理業務層拋出的異常

    (4) 負責規則驗證(數據格式,數據非空等)

    (5) 流程控制

  2、Service layer(服務層/業務層)

    (1) 封裝業務邏輯處理,並且對外暴露接口

    (2) 負責事務,安全等服務

  3、Persistence layer(持久層)

    (1) 封裝數據訪問的邏輯,暴露接口

    (2) 提供方便的數據訪問的方案(查詢語言,API,映射機制等)

  Domain layer(域層)

    (1) 業務對象以及業務關系的表示

    (2) 處理簡單的業務邏輯

    (3) 域層的對象可以穿越表示層,業務層,持久層

二、Spring的作用

為什么要使用Spring?

  (1) 簡化企業級開發

    ① 封裝了大部分的企業級服務,提供了更好的訪問這些服務的方式

    ② 提供了IOC,AOP功能的容器,方便編程

  (2) 遵循Spring框架的應用程序,一定是設計良好的,針對接口編程,這樣就簡化了企業級程序的設計。

  (3) Spring的組成

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

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

    ② Spring AOP:提供切面支持

    ③ Spring DAO:提供事務支持,JDBC,DAO支持

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

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

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

2 Spring的IoC

 

一、IoC的概念

 

IoC,Inversion of Control,控制反轉。

 

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

 

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

 

二、IoC的類型

 

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

 

  (2) 基於set方法

 

  (3) 基於構造器

 

三、Spring容器

 

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

 

  (1) BeanFactory<interface>

 

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

 

    ② 實現主要包括Xml BeanFactory

 

  (2) ApplicationContext

 

  (3) WebApplicationContext

 

  (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>子元素

 

2、consctructor注入

 

  <bean>

 

    <constructor-arg>

 

      <value></value>

 

    </constructor-arg>

 

    <constructor-arg>

 

      <ref bean= “ ” />

 

    </constructor-arg>

 

  </bean>

 

  如果Bean屬性不多,並且屬性值必須要注入才能使用,則應該采用constructor注入,其他情況就要set方法注入。

 

  裝配關系檢查(Dependency checking)

 

  simple:檢查簡單類型

 

  ojects:檢查對象類型

 

  all:檢查所有

 

<bean dependency-check=“all”></bean>

 

自動裝配(Autowring Properties)

 

裝配方式:byName,byType,autodetect,constructor

 

autowire=“byName”:按照名稱匹配

 

按照Bean的Id與屬性的名稱進行匹配

 

自動裝配與手動裝配可以結合使用,手動裝配會覆蓋自動裝配。

 

autowire=“byType”:按照類型匹配

 

要注入的屬性類型與配置文件中的Bean類型匹配的個數超過一個,會出錯。

 

autowire=“antodetect”:

 

先按照construct,后按照byType。

 

autowire=“constructor”:

 

先去匹配構造器中參數類型,后與配置文件中的Bean類型匹配。

 

 

 

3、比較兩種注入方式

 

關於自動匹配:

 

    優點:快速開發

 

    缺點:依賴關系不清楚,易出錯,不易維護。

 

自動匹配的應用場合:

 

    (1) 構建系統原型

 

    (2) 與依賴關系檢查(Dependency-check)結合使用

 

    (3) 自動裝配與手動裝配結合

 

4、特殊的IoC

 

   ① 后處理Bean

 

接口:org.springframework.beans.factory.config.BeanPostProcessor

 

  Spring已經實現該接口的BeanPostProcessor(不用再注冊)

 

  ApplicationContextAwareProcessor:

 

  把應用上下文傳遞給所用實現了 ApplicationContextAware接口的Bean

 

  ApplicationContextAware接口使用舉例,可參照事件監聽機制

 

  DefaultAdvisorAutoProxyCreator自動對Bean應用切面

 

② Bean工廠后處理(只能在應用上下文中使用)

 

  接口:org.springframework.beans.factory.config.BeanFactoryPostProcessor

 

  Spring內部接口實現:

 

org.springframework.beans.factory.config.PropertyPlaceholderConfigurer

 

屬性編輯 

 

org.springframework.beans.factory.config.CustomEditorConfigurer

 

CustomerInfo("fname-lname-address") 

 

 

 

實例工廠配置

 

代碼:

 

--------------------------------------------------------------------------------

 

<beans>

 

<bean id="car" class="ioc3.Car" factory-bean="carFactory" factory-method="getCar" dependency-check="all">

 

<property name="name">

 

<value>奧迪A8</value>

 

</property>

 

<property name="price">

 

<value>800000.0</value>

 

</property>

 

</bean>

 

<bean id="carFactory" class="ioc3.CarFactory"/>

 

</beans>

 

--------------------------------------------------------------------------------

 

 

 

靜態工廠配置

 

--------------------------------------------------------------------------------

 

<beans>

 

<bean id="car" class="ioc3.CarFactory" factory-method="getCar">

 

<property name="name">

 

<value>奧迪A8</value>

 

</property>

 

<property name="price">

 

<value>800000.0</value>

 

</property>

 

</bean>

 

</beans>

 

--------------------------------------------------------------------------------

 

5、事件處理

 

 

 

事件監聽

 

  1)自定義事件,通過繼承org.springframework.context.ApplicationEvent

 

  2)自定義監聽器,實現 org.springframework.context.ApplicationListener,並注冊

 

  3)發布事件,為得到應用上下文,

 

  必須實現org.springframework.context.ApplicationContextAware接口

 


免責聲明!

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



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