乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      Spring相關(guān)知識

       昵稱3403205 2010-09-17

      Spring的各種變量注入配置文件代碼(詳見項目:spring_injection)

      <property name="strValue" value = "hello"/>    注入string類型的變量

             <property name="intValue" value = "123"/>    注入int類型的變量

             <property name="listValue">

                 <list>

                    <value>list1</value>

                    <value>list2</value>

                 </list>

             </property>                                        注入list類型的變量

             <property name="setValue">

                 <set>

                    <value>set1</value>

                    <value>set2</value>

                    <value>set3</value>

                 </set>

             </property>                                        注入set類型的變量

             <property name="arrayValue">

                 <list>

                    <value>array1</value>

                    <value>array2</value>

                 </list>

             </property>                                        注入數(shù)組類型的變量

             <property name="mapValue">

                 <map>

                    <entry key="k1" value="v1"/>

                    <entry key="k2" value="v2"/>

                 </map>

             </property>                                   注入map類型的變量

      如何定義屬性編輯器?

      (1).繼承類PropertyEditorSupport,覆寫方法setAsText()

      (2).將屬性編輯器注入到spring配置文件中。

      如:如果有日期類型的屬性需要注入的話,則需要寫屬性編輯器,繼承PropertyEditorSupport類,覆寫相應的方法—setAsText()

      Spring公共屬性注入描述方法(詳見項目:spring_common)

          1.通過<bean>標簽定義公共屬性,制定屬性abstract = true;

          2.具有相同屬性的類,只需在<bean>標簽中指定其parent屬性即可

       

      公共屬性注入配置文件中的代碼:

      <bean id = "AbstractBean" abstract="true">

             <property name="id" value="20044455"/>

             <property name="name" value="Jack"/>

          </bean>               ---------------此處相當于java中父類

         

          <bean id = "bean2" class = "com.bjsxt.spring.Bean2" parent="AbstractBean">

      <property name="name" value="Jack"/>   -------相當于函數(shù)覆寫了一樣

             <property name="password" value="123456"/>

          </bean>      --------相當于子類繼承了AbstractBean,擁有它的屬性

         

          <bean id = "bean3" class = "com.bjsxt.spring.Bean3" parent="AbstractBean"/>

       

       

      *)依賴對象的注入方法可以有:

      1.ref屬性

      2.<ref>標簽

      3.內(nèi)部<bean>來定義,此時無需標注id

       

      Spring Bean的作用域(詳見項目:spring_self_injection)

      作用域?qū)傩?/span>scope可以取值:

         i.singleton-----表示每次調(diào)用getBean時,返回相同的實例;(系統(tǒng)默認情況下是singleton的)

         ii.prototype-----表示每次調(diào)用getBean時,返回不同的實例;

       

      Spring AOP知識(①采用annotation方式)

      1、  引用相應的spring 架包

      2、  采用Aspect定義切面

      3、  Aspect類中定義PointcutAdvice

      4、  啟用Aspectannotation的支持,并且將Aspect類和目標對象配置到Ioc容器中。

       

      注意:這種方式定義中,切入點的方法是不被執(zhí)行的,僅起到標識作用(即Advice通過該方法名找到相應切入點)

       

      Spring AOP知識(②采用配置文件方式)(詳見項目:spring_aop2):在配置文件中寫入相應的aspect切面(給出具體的所引對象)、Pointcut(切入點)(給定他的id(用于標識,便于advice找到在哪個切入點)和表達式(操作于哪些方法))和advice(具體的放法)(必須指定它的method(即自己添加的方法,與業(yè)務無關(guān))和Pointcut-ref(指出切入點))。

      配置文件中代碼如下:

      <aop:config>

             <aop:aspect id = "securityAspect" ref="securityHandler">

                 <aop:pointcut id="allMethods" expression="execution(* com.bjsxt.spring.UserManagerImpl.add*(..))"/>

                 <aop:after method="checkSecurity" pointcut-ref="allMethods"/>

             </aop:aspect>

      </aop:config>

       

       

      SpringAOP的支持(詳見項目:spring_aop2):

      Aspect在默認情況下不用實現(xiàn)接口,但目標對象必須實現(xiàn)接口,如果沒有實現(xiàn)接口,則必須引入CGLIB

      我們可以通過在advice的具體方法中添加JoinPoint參數(shù),這個值可以由spring自動傳入,從JoinPoint中可以獲得參數(shù)值和方法名等等。(詳見項目:spring_aop3)

       

       

       

      spring注入setXxx()方法或構(gòu)造函數(shù)法)

      屬性注入即通過setXxx()方法注入Bean的屬性值或依賴對象,由于屬性注入方式有可選擇性和靈活性高的優(yōu)點,因此屬性注入是實際應用中最常用的注入方式。

      代碼如下:

      public class Foo {   

        private String name;   

        public void setName(String name) {   

       this.name = name;   

      }      

       public String toStirng(){   

      return "Foo Name is :" + this.name;   

          }   

       }  

      相應配置文件中代碼如下:

      <bean id="foo" class="com.tony.test.Foo">   

        <property name="name" value="Foo"/>   

        </bean>

      構(gòu)造函數(shù)注入

      構(gòu)造函數(shù)注入是除屬性注入之外的另一種常用注入方式,它保證一些必要的屬性在Bean實例化時就得到設(shè)置,它保證了Bean實例在實例化后就可以使用

      代碼:

      public class Foo {   

        private String name;   

       private int age;   

      public Foo(String name,int age){   

        this.name = name;   

      this.age = age;   

        }   

        public String toStirng(){   

      return "Foo Name is :" + this.name;   

            }   

         }  

      相應配置文件中代碼:

      <bean id="foo" class="com.tony.test.Foo">   

            <constructor-arg type="int">   

           <value>20</value>   

       </constructor-arg>   

      <constructor-arg type="java.lang.String">   

      <value>Foo</value>   

       </constructor-arg>   

      </bean>  

       

       

      Spring配置中<bean>idname屬性區(qū)別

      1、在BeanFactory的配置中,<bean>是我們最常見的配置項,它有兩個最常見的屬性,即idname,1.id屬性命名必須滿足XML的命名規(guī)范,因為id其實是XML中就做了限定的。總結(jié)起來就相當于一個Java變量的命名:不能以數(shù)字、符號打頭,不能有空格,如123,?ad,"ab "等都是不規(guī)范的,Spring在初始化時就會報錯,諸如:代碼
      org.xml.sax.SAXParseException: Attribute value "?ab" of type ID must be a name.

       

          2.name屬性則沒有這些限定,你可以使用幾乎任何的名稱,如?ab,123等,但不能帶空格,如"a b"," abc",,這時,雖然初始化時不會報錯,但在getBean()則會報出諸如以下的錯誤:代碼
      org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'a b' is defined

      3.配置文件中不允許出現(xiàn)兩個id相同的<bean>,否則在初始化時即會報錯,如:
      代碼
      org.xml.sax.SAXParseException: Attribute value "aa" of type ID must be unique within the document.

         4.
      但配置文件中允許出現(xiàn)兩個name相同的<bean>,在用getBean()返回實例時,后面一個Bean被返回,應該是前面那 <bean>被后面同名的 <bean>覆蓋了。有鑒于此,為了避免不經(jīng)意的同名覆蓋的現(xiàn)象,盡量用id屬性而不要用name屬性。

         5.name
      屬性可以用’,’隔開指定多個名字,如<bean name="b1,b2,b3">,相當于多個別名,這時通過getBean("a1") getBean("a2") getBean("a3")返回的都是同一個實例(假設(shè)是singleton的情況)

         6.
      如果idname都沒有指定,則用類全名作為name,如<bean class="com.stamen.BeanLifeCycleImpl">,則你可以通過
      getBean("com.stamen.BeanLifeCycleImpl")
      返回該實例。

         7.
      如果存在多個idname都沒有指定,且實例類都一樣的<bean>,如:
      代碼
      <bean class="com.stamen.BeanLifeCycleImpl"/>
      <bean class="com.stamen.BeanLifeCycleImpl"/>
      <bean class="com.stamen.BeanLifeCycleImpl"/>

      則第一個bean通過getBean("com.stamen.BeanLifeCycleImpl")獲得,
      第二個bean通過getBean("com.stamen.BeanLifeCycleImpl#1")獲得,
      第三個bean通過getBean("com.stamen.BeanLifeCycleImpl#2")獲得,以此類推。<bean id="foo" class="com.tony.test.Foo">

       

       

      手工配置ssh事務管理器:

       <!-- 配置事務管理器 --> 
      <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
       
            <property name="sessionFactory">
       
                <ref bean="sessionFactory"/>
       
            </property>   
       
      </bean>

             這里創(chuàng)建了一個idtransactionManager的事務管理器,它匹配一個session工廠,<ref bean="sessionFactory"/>這個sessionFactory是指session工廠的ID。

      3)        對事務管理器進行事務設(shè)置。增加如下代碼:

      <tx:advice id="smAdvice" transaction-manager="transactionManager"> 
            <tx:attributes>
       
                <tx:method name="save*" propagation="REQUIRED"/>
       
                <tx:method name="del*" propagation="REQUIRED"/>
       
                <tx:method name="update*" propagation="REQUIRED"/>
       
            </tx:attributes>
       
      </tx:advice>

             這里創(chuàng)建了一個advice(通知),對事務管理器進行事務設(shè)置,這里意思是指,對于以save、del、update開頭的方法應用事務。

      4)        下面就把事務應用到具體的類。看如下代碼:

      <aop:config> 
            <aop:pointcut id="smMethod"
       
      expression="execution(* test.service.impl.*.*(..))"/>
       
            <aop:advisor pointcut-ref="smMethod" advice-ref="smAdvice"/>
       
      </aop:config>

             這里配置的作用是把我們上面創(chuàng)建的advice應用到具體的類中。以上代碼的意思指,給test.service.impl下的所有類的所有方法應用smAdvice。

      5)        示例:使用Session。

       

       

       

      幾種事物的傳播特性

      1. PROPAGATION_REQUIRED: 如果存在一個事務,則支持當前事務。如果沒有事務則開啟。
      2. PROPAGATION_SUPPORTS:
      如果存在一個事務,支持當前事務。如果沒有事務,則非事務的執(zhí)行。
      3. PROPAGATION_MANDATORY:
      如果已經(jīng)存在一個事務,支持當前事務。如果沒有一個活動的事務,則拋出異常。
      4. PROPAGATION_REQUIRES_NEW:
      總是開啟一個新的事務。如果一個事務已經(jīng)存在,則將這個存在的事務掛起。
      5. PROPAGATION_NOT_SUPPORTED:
      總是非事務地執(zhí)行,并掛起任何存在的事務。
      6. PROPAGATION_NEVER:
      總是非事務地執(zhí)行,如果存在一個活動事務,則拋出異常。
      7. PROPAGATION_NESTED
      :如果一個活動的事務存在,則運行在一個嵌套的事務中. 如果沒有活動事務, 則按TransactionDefinition.PROPAGATION_REQUIRED 屬性執(zhí)行。       <constructor-arg type="int">

                 <value>20</value>

             </constructor-arg>

             <constructor-arg type="java.lang.String">

                 <value>Foo</value>

             </constructor-arg>

      </bean>

       public class Foo {

              private String name;

              private int age;

              public Foo(String name,int age){

                 this.name = name;

                 this.age = age;

              }

              public String toStirng(){

                 return "Foo Name is :" + this.name;

              }

          }

       public class Foo {

              private String name;

              public void setName(String name) {

                 this.name = name;

              }

              public String toStirng(){

                 return "Foo Name is :" + this.name;

              }

            }

       

        本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多