免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
Spring相關(guān)知識

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類,覆寫相應(yīng)的方法—setAsText()

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

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

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

 

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

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

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

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

    </bean>               ---------------此處相當(dāng)于java中父類

   

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

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

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

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

   

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

 

 

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

1.ref屬性

2.<ref>標(biāo)簽

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

 

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

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

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

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

 

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

1、 引用相應(yīng)的spring 架包

2、 采用Aspect定義切面

3、 Aspect類中定義PointcutAdvice

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

 

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

 

Spring AOP知識(②采用配置文件方式)(詳見項目:spring_aop2):在配置文件中寫入相應(yīng)的aspect切面(給出具體的所引對象)、Pointcut(切入點)(給定他的id(用于標(biāo)識,便于advice找到在哪個切入點)和表達式(操作于哪些方法))和advice(具體的放法)(必須指定它的method(即自己添加的方法,與業(yè)務(wù)無關(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在默認(rèn)情況下不用實現(xiàn)接口,但目標(biāo)對象必須實現(xiàn)接口,如果沒有實現(xiàn)接口,則必須引入CGLIB

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

 

 

 

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

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

代碼如下:

public class Foo {   

  private String name;  

  public void setName(String name) {  

 this.name = name;  

}      

 public String toStirng(){   

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

    }   

 }  

相應(yīng)配置文件中代碼如下:

<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;  

      }   

   }  

相應(yīng)配置文件中代碼:

<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中就做了限定的??偨Y(jié)起來就相當(dāng)于一個Java變量的命名:不能以數(shù)字、符號打頭,不能有空格,如123,?ad,"ab "等都是不規(guī)范的,Spring在初始化時就會報錯,諸如:代碼
org.xml.sax.SAXParseException: Attribute value "?ab" of type ID mustbe 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 mustbe unique within the document.

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

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

   6.
如果idname都沒有指定,則用類全名作為name,如<beanclass="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事務(wù)管理器:

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

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

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

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

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

4)        下面就把事務(wù)應(yīng)用到具體的類??慈缦麓a:

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

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

5)        示例:使用Session。

 

 

 

幾種事物的傳播特性

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

           <value>20</value>

      </constructor-arg>

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

          <value>Foo</value>

      </constructor-arg>

</bean>

 public classFoo {

        privateString name;

        privateint age;

        publicFoo(String name,int age){

          this.name = name;

          this.age = age;

        }

        publicString toStirng(){

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

        }

    }

 public classFoo {

        privateString name;

        publicvoid setName(String name) {

          this.name = name;

        }

        publicString toStirng(){

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

        }

      }

 

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Java的Spring框架中AOP項目的一般配置和部署教程
mybatis中文版教程
足夠應(yīng)付面試的Spring事務(wù)源碼閱讀梳理
Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(二)
5.Spring的事務(wù)管理
深入理解微服務(wù)架構(gòu)spring的各個知識點(面試必問知識點)
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服