国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

裝配Bean

2019-11-06 06:39:12
字體:
供稿:網(wǎng)友

1.聲明Bean

      SPRing框架自帶了10個(gè)命名空間。      1.aop為聲明切面和將@aspectJ注解的類代理為spring切面提供了配置元素。      2.beans:支持聲明Bean和轉(zhuǎn)配Bean,是Spring最核心也是最原始的命名空間。      3.context:為spring應(yīng)用上下文提供了配置元素,包括自動(dòng)檢測(cè)和自動(dòng)轉(zhuǎn)配Bean,注入非spring管理的對(duì)象。      4.jee:提供了與java ee API的集成,例如JNDI和EJB      5.jms:為聲明消息驅(qū)動(dòng)的POJO提供了配置元素      6.lang:支持配置有Groovy、JRuby等腳本實(shí)現(xiàn)的Bean      7.mvc:?jiǎn)?dòng)spring mvc的能力。      8.oxm:支持spring的對(duì)象到xml映射配置      9.tx:提供聲明式事務(wù)配置      10.util:提供各種各樣的工具類元素,包括把集合配置為Bean,支持屬性占位符元素。       spring默認(rèn)是通過默認(rèn)構(gòu)造方法的方式注入Bean的,可以使用<constructor-arg  value=""/>來調(diào)用一個(gè)參數(shù)為值的構(gòu)造器,也可以使用<constructor-arg ref="'/>來調(diào)用一個(gè)參數(shù)為對(duì)象的構(gòu)造器,也可以按順序使用多個(gè)<constructor-arg >來調(diào)用有多個(gè)參數(shù)的構(gòu)造器。       有時(shí)候靜態(tài)工廠方法是實(shí)例化對(duì)象的唯一方法。通過<bean>中factory-method屬性來裝配工廠創(chuàng)建的Bean。它允許調(diào)用一個(gè)指定的靜態(tài)方法,代替構(gòu)造方法來創(chuàng)建類的實(shí)例。

1.1 Bean的作用域

      所以Spring Bean默認(rèn)是單例的,就是分配Bean時(shí)總是同一個(gè)Bean。可以通過<bean>屬性scope來指定作用域。      1.singleton:在每一個(gè)spring容器中,一個(gè)Bean的定義只有一個(gè)對(duì)象實(shí)例(默認(rèn))。      2.prototype:允許Bean的定義被實(shí)例化任意次(每次調(diào)用都創(chuàng)建一個(gè)實(shí)例)      3.request:在一次http請(qǐng)求中,每個(gè)Bean定義一個(gè)實(shí)例。僅基于web的spring上下文(例如spring mvc)有效      4.session:在一個(gè)http session中,每個(gè)Bean定義一個(gè)實(shí)例。僅基于web的spring上下文(例如spring mvc)有效      5.global-session:在一個(gè)全局http session中,每個(gè)Bean定義一個(gè)實(shí)例。僅在portlet上下文有效      <bean>中有init-method和destory-method屬性來指定在Bean初始化和銷毀時(shí)調(diào)用的方法。Bean實(shí)現(xiàn)InitlizingBean和DisposableBean也可是實(shí)現(xiàn)初始化和銷毀,這樣做的最大好處就是Spring能夠自動(dòng)檢測(cè)實(shí)現(xiàn)類這些接口的bean,缺點(diǎn)是讓bean和spring的API產(chǎn)生了耦合。推薦使用init-method和destory-method屬性。      如果所有的Bean都有同一個(gè)初始化和銷毀方法,可以再beans元素中加入default-init-method和default-destory-method屬性。

2.注入Bean的屬性

      通常javaBean的屬性是私有的,而且有set和get方法,spring借助屬性的set方法配置屬性的值,以實(shí)現(xiàn)setter方式的注入。2.1注入簡(jiǎn)單值       通過<property>來注入,和<constructor-arg>類似,只不過一個(gè)通過構(gòu)造器來注入值,一個(gè)通過屬性的setter方法注入值。
<bean id="" class="">  <property name="屬性" value="35"/><property name="name" value="jack"/></bean>      2.2引入其他Bean     
<bean>    <property name="" ref="其他bean的id"/></bean>     還可以注入內(nèi)部Bean。內(nèi)部Bean就是定義在其他Bean內(nèi)部的Bean。
<bean>    <property name="'>       <bean class=""/>    </property></bean>
<bean>    <constructpr-arg  >        <bean class=""/>    </constructor-arg></bean>     內(nèi)部Bean沒有id屬性,因?yàn)閕d屬性沒有必要,不會(huì)通過id來引用內(nèi)部Bean,這也突出了內(nèi)部Bean的最大缺點(diǎn):不能復(fù)用。內(nèi)部Bean僅適用于一次注入,而且不能被其他Bean引用。2.3使用命名空間p來裝配Bean的屬性
<bean id="" class=""  p:name="" p:age="" p:A-ref=""/>p:xxx來指定屬性。-ref標(biāo)識(shí)表示裝配的是引用而不是值。和<property>是等價(jià)的。2.4裝配集合     1.<list>:裝配list類型的值,元素允許重復(fù)。     2.<set>:裝配set類型的值,元素不允許重復(fù)     3.<map>:裝配map類型的值,名稱和值可以是任意類型。     4.<props>:裝配properties類型的值:名稱和值都是string類型。2.4.1 list和set    
<bean> <property name="">      <list>          <ref bean=""/>          <ref bean=""/>          <ref bean=""/>      </list>  </property> <property name="">      <set>          <value></value>          <value></value>      </set>  </property></bean>list和set都可以用來裝配類型為Collection的任意實(shí)現(xiàn)或數(shù)組的屬性。意思就是如果屬性為L(zhǎng)ist  list,可以用set來裝配。2.4.2裝配集合
<property name="">      <map>          <entry key="" value=""/>          <entry key="" value-ref=""/>          <entry key-ref="" value=""/>              <entry key-ref="" value-ref=""/>      </map>  </property>key:指定map中entry中的鍵value:指定map中entry中的值key-ref:指定map中entry的鍵為上下文中其他Bean的引用。value-ref:指定map中entry的值為上下文中其他Bean的引用。
<property name="">//鍵值都為string時(shí)使用,也可以使用map      <props>        <prop key=""></prop>        <prop key=""></prop>        <prop key=""></prop>      </props>  </property><property>:用來給Bean的屬性注入值或者引用<props>:用來定義一個(gè)properties類型的集合值<prop>:用來定義一個(gè)<props>中的成員。2.5裝配空值     spring可以把屬性設(shè)置為null值。
<property name="" ><null/></property>     可能某個(gè)屬性要設(shè)置為null值,或者覆蓋自動(dòng)裝配的值就可以用這種方式。

3.使用表達(dá)式裝配

      上面講的方式是靜態(tài)的。要使用動(dòng)態(tài)的方式可以使用Spring表達(dá)式語言(SpEL),它通過運(yùn)行期的表達(dá)式將值或引用傳遞到Bean的屬性或構(gòu)造器中。字面值:
<bean>    <property name="" value="#{23}"/>    <property name="" value="name is  #{23}"/>    <property name="" value="#{1e4}"/>//10000.0<property name="" value="#{'jack'}"/>//string類型的值</bean>引用Bean、properties和方法:SpEL可以通過id來引用其他的Bean
<property name="" value="#{abc}"/>//引用Bean<property name="" value="#{abc.name}"/>//引用Bean中的屬性<property name="" value="#{abc.getA()}"/>//引用Bean中方法返回的值<property name="" value="#{abc.getA().toUpperCase()}"/>//引用Bean中方法返回的值,大寫,不能返回null,會(huì)報(bào)空指針異常<property name="" value="#{abc.getA()?.toUpperCase()}"/>//引用Bean中方法返回的值,大寫,?左邊為null,什么都不做,不是null執(zhí)行?后面的操作操作類:T{}會(huì)調(diào)用類作用域的方法和常量。可以訪問類的靜態(tài)方法和常量
<property name="" value="#{T{java.lang.Math}.PI}"/><property name="" value="#{T{java.lang.Math}.random()}"/>數(shù)值運(yùn)算:
<property name="" value="#{T{java.lang.Math}.PI*100}"/><property name="" value="#{abc.age + 10}"/><property name="" value="#{abc.age +' ' +abc.name}"/>比較值:
<property name="" value="#{abc.age == 18}"/><property name="" value="#{abc.age <= 18}"/>正則表達(dá)式:匹配返回true,否則false
<property name="" value="#{abc.email matches '[xxxxx]'}"/>操作集合:     使用<util:list>配置一個(gè)集合。
<util:list id="aaa">      <bean class="" p:xxx="" p:xxx-ref=""/></util:list>訪問集合元素:
<property name="" value="#{aaa[2]}"/>
<util-properties id="bbb" location="classpath:bbb.properties" />查詢集合成員:
<property name="" value="#{aaa.?[age ==18]}"/>.?返回的是[]中為true的集合,.^[]和.$[]返回的是第一和最后匹配項(xiàng)。不要多過使用這些表達(dá)式
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 揭西县| 徐汇区| 宁河县| 渭源县| 南通市| 通州区| 乐平市| 大连市| 乐陵市| 雅江县| 青海省| 高清| 赞皇县| 津南区| 延长县| 镇平县| 翁牛特旗| 个旧市| 昌江| 芦溪县| 汉寿县| 台中市| 金塔县| 桐乡市| 策勒县| 临猗县| 仙游县| 崇仁县| 郓城县| 永修县| 安平县| 江西省| 马关县| 玉树县| 九龙县| 周至县| 介休市| 南平市| 手机| 时尚| 长宁县|