spring知識點

1.WEB MVC

   C:(1) 處理器映射

              * BeanNameUrlHandlerMapping(缺省)

              * SimpleUrlHandlerMapping


         (2) AbstractController基類

            |--- MultiActionController 多個行爲封裝在這個類裏,請求url裏參數method=方法名

            |--- AbstractCommandController  它能夠將請求參數綁定到你指定的命令對象,提供驗證功能

                    AbstractFormController  支持表單提交,用戶輸入綁定到命令對象,驗證表單內容,防止重複提交、表單驗證以及一般的表單處理流程

                  SimpleFormController   提供更多的支持。你可以爲其指定一個命令對象,顯示錶單的視圖名,當表單提交成功後顯示給用戶的視圖名等等

                  AbstractWizardFormController

    V:

       1) 視圖解析器

      InternalResourceViewResolver

<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>

<property name="prefix" value="/WEB-INF/jsp/"/>

<property name="suffix" value=".jsp"/>

</bean>

      ResourceBundleViewResolver 需要一個屬性文件來定義view名到1) class 2) URL的映射


  (2) i18n:

< 資源名 >_< 語言代碼 >_< 國家/ 地區代碼 >.properties

    1) jdk裏:

     a)ResourceBundle:

ResourceBundle rb1 = ResourceBundle.getBundle("com/baobaotao/i18n/resource", Locale.US);

rb1.getString("greeting.common")

          b)格式化

  greeting.common=How are you!{0},today is {1}

  Object[] params = {"John", new GregorianCalendar().getTime()};

String str1 = new MessageFormat(rb1.getString("greeting.common"),Locale. US).format(params);

   2) spring封裝:

        a) MessageSource 接口:   String getMessage(String code, Object[] args, String defaultMessage, Locale locale)

     b) 實現類1: ResourceBundleMessageSource

   MessageSource ms = (MessageSource)ctx.getBean("myResource");//返回

  ResourceBundleMessageSource
Object[] params = {"John", new GregorianCalendar(). getTime()};
String str1 = ms.getMessage("greeting.common",params,Locale.US);

無須再分別加載不同語言、不同國家/ 地區的本地化資源文件,僅僅通過資源名就可以加載整套的國際化資源文 件。此外,我們無須顯式使用MessageFormat 操作國際化信息,僅通過MessageSource# getMessage() 方法就可以完成操作了

         c) 實現類2: ResourceBundleMessageSource 的唯一區別在於它可以定時刷新資源文件



2. IOC

bean.xml

 <beans>
<bean id="TheAction" class="net.chen.spring.qs.UpperAction">
<property name="message">
<value>HeLLo</value>
</property>
</bean>
</beans>


public void testQuickStart () {
ApplicationContext ctx=new  FileSystemXmlApplicationContext ("bean.xml");
Action a= (Action) ctx.getBean ("TheAction");
System.out.println (a. execute ("Rod Johnson"));
}







3.AOP

    每個組件負責 一部分功能,這些組件也經常帶有一些除了核心功能之外的附帶功能 。系統服務如日誌、事務管理和安全經常融入到一些其他功能模塊中。這些系統服務通常叫做交叉業務.

(1)AspectJ( 需要使用到AspectJaspectjweaver.jar)

          1)   使用基於Schema 的配置文件配置Spring AOP

        a) 原有的業務邏輯類

        b) 編寫Advice(簡單Aop代碼,例如log輸出,事務處理)

        c) 配置

           1)配置切入點pointcut

           < aop:pointcut id = "somePointcut"

                    expression = "execution(* springroad.demo.chap5.exampleB.Component.business*(..))" />

          2)將pointcut與advice關聯            

           < aop:before pointcut-ref = "somePointcut"

              method = "beginTransaction" />

           < aop:after-returning pointcut-ref = "somePointcut"

              method = "endTransaction" />


          2)使用anotation

  (2) 僅依靠Spring AOP 方面的API (不要使用AspectJaspectjweaver.jar)

      1) advice是實現相關Advice (通知) 接口 ,

Spring實現了AOP聯盟接口。在Spring AOP中,存在如下幾種通知(Advice)類型
Before通知:在目標方法被調用前調用,涉及接口org.springframework.aop.MethodBeforeAdvice;
After通知:在目標方法被調用後調用,涉及接口爲org.springframework.aop.AfterReturningAdvice;
Throws通知:目標方法拋出異常時調用,涉及接口org.springframework.aop.MethodBeforeAdvice;
Around通知:攔截對目標對象方法調用,涉及接口爲org.aopalliance.intercept.MethodInterceptor。

例中 SleepHelper實現此接口

 

  2) pointcut: 那將方法要被截獲

<bean id="spleepPointcut" class="org.springframework.aop.support.JdkRegexpMethodPointcut">
  <property name="pattern" value=".*sleep"/>
</bean>

 

 3) advicor將pointcut與advice捆綁在一起

<bean id="sleepHelperAdvisor" class="org.springframework.aop.support.DefaultPointcutAdvisor">
     <property name="advice" ref="sleepHelper"/>
     <property name="pointcut" ref="sleepPointcut"/>
</bean>

 

4)產生代理對象

<bean id="humanProxy" class="org.springframework.aop.framework.ProxyFactoryBean">
     <property name="target" ref="human"/>
     <property name="interceptorNames" value="sleepHelperAdvisor" />
     <property name="proxyInterfaces" value="test.spring.aop.bean.Sleepable" />
</bean>

 

(3)自動代理

自動代理的功能,能讓切點跟通知自動進行匹配,修改配置文件如下:
 <bean id="sleepHelper" class="test.spring.aop.bean.SleepHelper"></bean>


  <bean id="sleepAdvisor" class="org.springframework.aop.support.RegexpMethodPointcutAdvisor">
    <property name="advice" ref="sleepHelper"/>
    <property name="pattern" value=".*sleep"/>
  </bean>


  <bean id="human" class="test.spring.aop.bean.Human"> </bean>     --target


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

 

 


4.事務管理

  接口 PlatformTransactionManager

              |---DataSourceTransactionManager

              |---HibernateTransactionManager

              |---JdoTransaction-Manager

              |---JtaTransactionManager


public interface PlatformTransactionManager

  TransactionStatus getTransaction(TransactionDefinition definition) throws TransactionException;

  void commit(TransactionStatus status)  throws TransactionException;

  void rollback(TransactionStatus status)  throws TransactionException;

TransactionException是UncheckedException.事務的失敗通常都是致命的錯誤,Spring不強迫您一定要處理,而是讓您自行選擇是否要捕捉異常。

   getTransaction()方法根據一個TransactionDefinition對象來回傳一個TransactionStatus對 象,TransactionDefinition接口的實例定義了事務的隔離程度(Isolationlevel)、傳播行爲 (Propagationbehavior)、超時(Timeout)、只讀(Read-only)等,TransactionStatus代表着一個新 的事務發起或已經存在的事務,您可以通過它來控制事務的執行或調查的狀態.


JDBC聲明事務管理

  (1) 使用TransactionProxyFactoryBean,指定要介入的事務管理對象及其方法。  需要一個目標對象包裝在事務代理中。這個目標對象一般是一個普通Javabean。當我們定義TransactionProxyFactoryBean 時,必須提供一個相關的 PlatformTransactionManager的引用和事務屬性。事務屬性含有事務定義。


< bean id ="personDao" class ="org.springframework.transaction.interceptor.TransactionProxyFactoryBean" >
        
<!--    爲事務代理bean注入事務管理器 -->
            
< property name ="transactionManager" >< ref bean ="transactionManager" /></ property >
        
<!--    設置事務屬性 -->
        
< property name ="transactionAttributes" >
< props >
      
<!--    所有以find開頭的方法,採用required的事務策略,並且只讀 -->
                
< prop key ="find*" > PROPAGATION_REQUIRED,readOnly </ prop >
      
<!--    其他方法,採用required的事務策略 ->
                 <prop key="*">PROPAGATION_REQUIRED</prop>
             </props>
         </property>
        <!--   爲事務代理bean設置目標bean
-->
        
< property name ="target" >
            
< ref local ="personDaoTarget" />
        
</ property >
    
</ bean >


 (2) BeanNameAutoProxyCreator

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