Spring核心總結

一、    IoC(Inversion of control): 控制反轉

1IoC

概念:控制權由對象本身轉向容器;由容器根據配置文件去創建實例並創建各個實例之間的依賴關係

核心:bean工廠;在Spring中,bean工廠創建的各個實例稱作bean

2bean工廠創建bean的三種方式:

u      通過構造方法直接創建:

<bean id=”” class=”bean class name”>

u      通過靜態工廠方法創建:

<bean id=”” class=”factory class name” factory-method=””>

u      通過非靜態工廠方法創建:

<bean id=”factory” class=”factory class name”>

<bean id=”” factory-bean=” factory” factory-method=””>

3Spring中實現IoC的方式:依賴注入(Dependency Injection

Spring中依賴注入的兩種方式:

u      通過setter方法注入:

<property name=””></property>

其中,name屬性的取值依setter方法名而定

u      通過構造方法注入:

<constructor-arg index=””></ constructor-arg>

其中,index表示構造方法中的參數索引(第一個參數索引爲0)

4、設置屬性時可選的標籤:

n        value:基本類型(封裝類型)或String類型

n        ref:引用工廠中其它的bean

n        listList或數組類型

n        setSet類型

n        mapMap類型

n        propsProperties類型

5、自動裝配:自動將某個bean 注入到另一個bean的屬性當中

bean標籤的autowire屬性)

6、依賴檢查:檢查bean的屬性是否完成依賴關係的注入

bean標籤的dependency-check屬性)

7、生命週期方法:

              init-method(也可實現接口org.springframework.beans.factory.InitializingBean

destroy-method(也可實現接口DisposableBean)

       8、單例bean:默認情況下,從bean工廠所取得的實例爲Singleton

                                   beansingleton屬性)

       9Aware相關接口:可以通過實現Aware接口來獲得Spring所提供的資源

l        org.springframework.beans.factory.BeanNameAware

l        org.springframework.beans.factory.BeanFactoryAware

l        org.springframework.context.ApplicationContextAware

10ApplicationContext的功能擴展:

1BeanPostProcessor:若想在Springbean完成依賴注入之後,再補充一些後續操作,則可以定義一個bean類來實現接口:org.springframework.beans.factory.config.BeanPostProcessor,然後在配置文件中定義該bean類;從而Spring容器會在每一個bean被初始化之前、之後分別執行實現了該接口的bean類的postProcessBeforeInitialization()方法和postProcessAfterInitialization()方法;

              2BeanFactoryPostProcessor

l        CustomEditorConfigurer:可藉助實現了接口java.beans.PropertyEditor的類,並依據當中的實現,將字符串類型轉換爲指定類型的對象;

l        PropertyPlaceholderConfigurer:可將配置文件中屬性值用“${key}”形式表示,則會將其值替換成指定的屬性文件中key所對應的value

l        PropertyOverrideConfigurer:可藉助該類在指定的屬性文件中設定一些優先的屬性(將忽略配置文件中對應屬性的設定值);

(注意:屬性文件中設定屬性值的格式爲:beanName.propertyName=value

3) 國際化消息的支持:可通過ApplicationContextgetMessage()方法獲得指定資源文件中的消息;配置如下:

<bean

id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">

    <property name="basename">

      <value>first/msg</value>

    </property >

  </bean>

4) 事件的支持:

       可發佈的事件:ApplicationEvent

       發佈事件的方法:publishEventApplicationEvent

       事件監聽接口:ApplicationListener

       11ApplicationContext管理bean的執行階段:

l        創建bean

l        屬性注入(依賴關係的注入);

l        BeanNameAware接口實現類的setBeanName()方法;

l        BeanFactoryAware接口實現類的setBeanFactory()方法;

l        ApplicationContextAware接口實現類的setApplicationContext()方法;

l        BeanPostProcessor接口實現類中的postProcessBeforeInitialization()方法;

l        InitializingBean接口實現類的afterPropertiesSet()方法;

l        Bean定義文件中init-method屬性所指定的方法;

l        BeanPostProcessor接口實現類中的postProcessAfterInitialization()方法;

       12FactoryBean:用來創建bean

        <bean id="myObject" 
              class="org.springframework.beans.factory.config.
               MethodInvokingFactoryBean">

          <property name="staticMethod">

            <value>com.whatever.MyClassFactory.getInstance</value>

          </property>

</bean>

(注意:通過bean工廠的getBean(myObject)得到的是FactoryBean所生產的產品;getBean(&myObject)得到的是FactoryBean實例本身)

二、AOP(Aspect-Oriented Programming): 面向方面編程

1、代理的兩種方式:

靜態代理:

l        針對每個具體類分別編寫代理類;

l        針對一個接口編寫一個代理類;

動態代理:

針對一個方面編寫一個InvocationHandler,然後借用JDK反射包中的Proxy類爲各種接口動態生成相應的代理類

2、AOP的主要原理:動態代理

3、AOP中的術語:

l        Aspect:方面,層面

l        Joinpoint:結合點、聯結點;加入業務流程的點或時機

l        Pointcut:切入點、作用點;指定某個方面在哪些聯結點織入到應用程序中

l        Advice:通知、行爲;某個方面的具體實現

l        Advisor:由PointcutAdvice共同構成

4、PointcutSpring根據類名稱及方法名稱定義Pointcut,表示Advice織入至應用程序的時機;

org.springframework.aop.Pointcut

5、ProxyFactoryBean:用來創建代理對象

<bean id="proxy"

class="org.springframework.aop.framework.ProxyFactoryBean">

    <property name="target">

         <ref bean="target bean"/>

    </property>

    <property name="proxyInterfaces">

         <list>

<value>interfaces of target bean implemented</value>

</list>

    </property>

    <property name="interceptorNames">

           <list>

              <value>Advice/Advisor bean</value>

         </list>

    </property>

</bean>

創建代理對象需指定的三要素:

l        target:設定目標對象(只能是一個);

l         proxyInterfaces:設定代理接口(目標對象所實現的接口);

l        interceptorNames:設定攔截器的名字(各個adviceadvisor bean的列表)

6、Advice:五種(根據織入的時機不同而劃分)

l        Before Advice:在目標對象的方法執行之前加入行爲;

要實現的接口:org.springframework.aop.MethodBeforeAdvice

l        After Advice:在目標對象的方法執行之後加入行爲;

要實現的接口:org.springframework.aop.AfterReturningAdvice

l        Throw Advice:在目標對象的方法發生異常時加入行爲

要實現的接口:org.springframework.aop.ThrowsAdvice

l        Around Advice:在目標對象的方法執行前後加入行爲

要實現的接口:org.aopalliance.intercept.MethodInterceptor

l        Introduction Advice:引入的行爲(增加了可操作的方法)

1.        聲明要添加的功能接口;

2.        創建引入Advice

(繼承org.springframework.aop.support.DelegatingIntroductionInterceptor,並實現添加的功能接口)

3.        在配置文件中定義一個DefaultIntroductionAdvisorbean

(需要兩個構造方法的參數:Advice和添加的功能接口)

7、PointcutAdvisorPointcut定義了Advice的應用時機;在Spring中,使用PointcutAdvisorPointcutAdvice結合爲一個對象

l         NameMatchMethodPointcutAdvisor:可用來指定Advice所要應用的目標對象上的方法名稱

<bean id="nameAdvisor"

class="org.springframework.aop.support.NameMatchMethodPointcutAdvisor">

    <property name="mappedName">

      <value>do*</value>

    </property>

    <property name="advice">

      <ref local="AdviceBeanName"/>

    </property>

</bean>

l         RegexpMethodPointcutAdvisor:可使用Regular expression定義Pointcut,在符合Regular expression的情況下應用Advice,其pattern屬性用來指定所要符合的完整類名(包括 package名稱)及方法名;定義該屬性時可使用的符號包括:

符號

描述

.

符合任意一個字符

+

符合前一個字符一次或多次

*

符合前一個字符零次或多次

/

轉義字符,用來轉義正則表達式中使用到的字符

       <bean id="regexpAdvisor"

class="org.springframework.aop.support.RegexpMethodPointcutAdvisor">

          <property name="pattern">

               <value>.*do.*</value>

          </property>

          <property name="advice">

               <ref local="AdviceBeanName"/>

          </property>

     </bean>

8、AutoProxy:自動代理

l        BeanNameAutoProxyCreator根據bean的名字爲其自動創建代理對象,bean工廠自動返回其代理對象:

<bean

class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">

<property name="beanNames">

<list>

        <value>beanName</value>

</list>

</property>

<property name="interceptorNames">

<list>

<value>Advice/Advisor Bean Name</value>

                            </list>

</property>

</bean>

l        DefaultAdvisorAutoProxyCreator自動將Advisor應用到符合Pointcut的目標對象上

<bean id="regexpAdvisor"

class="org.springframework.aop.support.RegexpMethodPointcutAdvisor">

    <property name="pattern">

      <value>.*do.*</value>

    </property>

    <property name="advice"><ref local="AdviceName"/></property>

</bean>

<bean

class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator"/>

三、SpringWeb MVC

       1DispatcherServlet:作爲前端控制器,負責分發客戶的請求到Controller

              web.xml中的配置如下:

       <servlet>

      <servlet-name>mvc</servlet-name>

      <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

         <init-param>

          <param-name>contextConfigLocation</param-name>

          <param-value>/WEB-INF/mvc-servlet.xml</param-value>

      </init-param>

      <load-on-startup>1</load-on-startup>

      </servlet>

      <servlet-mapping>

      <servlet-name>mvc</servlet-name>

      <url-pattern>*.do</url-pattern>

      </servlet-mapping>

       2Controller:負責處理客戶請求,並返回ModelAndView實例;

Controller必須實現接口org.springframework.web.servlet.mvc.Controller,實現該接口中的方法handleRequest(),在該方法中處理請求,並返回ModelAndView實例

3HandlerMappingDispatcherServlet根據它來決定請求由哪一個Controller處理;

l         默認情況下,DispatcherServlet將使用org.springframework.web.servlet.handler. BeanNameUrlHandlerMapping,即使用和客戶請求的URL名稱一致的Controllerbean實例來處理請求;

l         另外一種常用的HandlerMappingorg.springframework.web.servlet.handler. SimpleUrlHandlerMapping,配置如下:

<bean

class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">

    <property name="mappings">

      <props>

        <prop key="/add.do">add</prop>

      </props>

    </property>

</bean>

在以上“mappings”屬性設置中,“key”爲請求的URL,而“value”爲處理請求的Controllerbean名稱

4ModelAndView:用來封裝View與呈現在View中的Model對象;

DispatcherServlet根據它來解析View名稱,並處理呈現在View中的Model對象

       5ViewResolverDispatcherServlet委託ViewResolver來解析View名稱;

              常用的ViewResolver實例配置如下:

       <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">

           <property name="prefix">

                 <value>/</value>

           </property>

            <property name="suffix">

                  <value>.jsp</value>

           </property>

      </bean>

四、Spring Data Access

       1Template

       2Dao Support

       3Transaction Manager

       4Transaction Proxy

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章