zoukankan      html  css  js  c++  java
  • Spring攻略学习笔记(2)配置Spring IoC容器中的Bean

     (1) 每个Bean都应该提供一个唯一的名称或id,以及一个完全限定的类名,用来让IoC容器对其进行实例化。对于简单类型的每个bean属性(例如String和其他简单类型),可以为其指定一个<value>元素。Spring会试图将你指定的值转换为该属性的声明类型。为了通过setter注入配置一个属性,可使用<property>元素,并在其name属性中指定属性名称。注意: 每个<property>要求bean包含对应的一个setter方法。如下:
         <bean name="sequenceGenerator"
    class="com.jackie.codeproject.springrecipesnote.springioc.SequenceGenerator">
    <property name="prefix">
    <value>30</value>
    </property>
    <property name="suffix">
    <value>A</value>
    </property>
    <property name="initial">
    <value>100000</value>
    </property>
    </bean>
            也可以在<constructor-arg>元素中声明,通过构造函数注入配置Bean属性。 书上说<constructor-arg>中没有name属性是因为构造函数参数是基于位置的,但是最新版的(不知从哪个版本开始)Spring中<constructor-arg>元素是有name属性的。如下:
           <bean name="sequenceGenerator"
    class="com.jackie.codeproject.springrecipesnote.springioc.SequenceGenerator">
    <constructor-arg name="prefix">
    <value>30</value>
    </constructor-arg>
    <constructor-arg name="suffix">
    <value>A</value>
    </constructor-arg>
    <constructor-arg name="initial">
    <value>100000</value>
    </constructor-arg>
    </bean>
            实际上标记Bean的首选方法是:通过标准的XML id属性,如果你的文本编辑器是XML感知的,就能在设计时校验每个Bean的唯一性。
          <bean id="sequenceGenerator"
    class="com.jackie.codeproject.springrecipesnote.springioc.SequenceGenerator">
    。。。
          </bean>
             书上说Spring允许在name属性中为Bean指定多个以逗号分隔的,但不能在id属性中这么做,因为这里不允许逗号。但最新版的Spring中是id属性中可以含有特殊字符(包含逗号),但name属性不能包含逗号。
           实际上,Bean名称和Bean id都是必须的。没有定义名称的Bean称作匿名Bean。这样的Bean通常只用于与Spring容器交互,这种情况下将只按类型注入,或者将会在一个外部Bean的声明中嵌入它。
    (2)用简写定义Bean属性
           可以在<property>元素和<constructor-arg>元素中提供value属性替换包围在<value>元素中的属性。
           <bean id="sequenceGenerator"
    class="com.jackie.codeproject.springrecipesnote.springioc.SequenceGenerator">
    <property name="prefix" value="30" />
    <property name="suffix" value="A" />
    <property name="initial" value="100000" />
            
            <bean name="sequenceGenerator"
    class="com.jackie.codeproject.springrecipesnote.springioc.SequenceGenerator">
    <constructor-arg name="prefix" value="30" />
    <constructor-arg name="suffix" value="A" />
    <constructor-arg name="initial" value="100000" />
    </bean>
            这样简洁不少。从Spring 2.0开始,可以 使用p schema像<bean>元素中的属性那样定义Bean属性。如下:
    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:p="http://www.springframework.org/schema/p"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd">
    <bean id="sequenceGenerator"
    class="com.jackie.codeproject.springrecipesnote.springioc.SequenceGenerator"   p:prefix="30" p:suffix="A" p:initial="100000"  />
    </beans>
    (3)为Bean配置集合
             为了在Bean配置中定义java.util.List接口的属性,需指定一个包含元素的<list>标志。<list>标记中所允许的元素可以是由<value>指定的常量值、<ref>指定的Bean引用、<bean>指定的内部Bean定义、<idref>指定的ID引用定义,或者<null>指定的空元素。甚至可以在一个集合中嵌入另一个集合。
           <bean id="sequenceGenerator"
    class="com.jackie.codeproject.springrecipesnote.springioc.SequenceGenerator">
    <property name="suffixes">
    <list>
    <value>A</value>
    <bean class="java.net.URL">
    <constructor-arg value="http" />
    <constructor-arg value="www.apress.com" />
    <constructor-arg value="/" />
    </bean>
    <null />
    </list>
    </property>
    <property name="initial" value="100000" />
    </bean>
              Bean配置文件中的数组定义与<list>标记指出的列表相同。
             为了定义java.util.Set接口的属性,使用<set>标记来定义元素,方法与List相同。
             <bean id="sequenceGenerator"
    class="com.jackie.codeproject.springrecipesnote.springioc.SequenceGenerator">
    <property name="suffixes">
    <set>
    <value>A</value>
    <bean class="java.net.URL">
    <constructor-arg value="http" />
    <constructor-arg value="www.apress.com" />
    <constructor-arg value="/" />
    </bean>
    <null />
    </set>
    </property>
    <property name="initial" value="100000" />
    </bean>
              Spring使用了java.util.LinkedHashSet保留了元素的顺序。
            在Spring中,Map由<map>标记定义,带有多个<entry>标记作为子项目,每个项目包含一个关键字和一个值。关键字必须在<key>标记中定义,关键字和值的类型没有限制,可以为他们指定一个<value>、<ref>、<bean>、<idref>或<null>值。Spring也将使用java.util.LinkedHashMap保留Map项目的顺序。
            <bean id="sequenceGenerator"
    class="com.jackie.codeproject.springrecipesnote.springioc.SequenceGenerator">
    <property name="suffixes">
    <map>
    <entry>
    <key>
    <value>type</value>
    </key>
    <value>A</value>
    </entry>
    <entry>
    <key>
    <value>url</value>
    </key>
    <bean class="java.net.URL">
    <constructor-arg value="http" />
    <constructor-arg value="www.apress.com" />
    <constructor-arg value="/" />
    </bean>
    </entry>
    </map>
    </property>
    <property name="initial" value="100000" />
    </bean>
            可以用简写将关键字和值对用<entry>标记的属性来定义。如果是简单常量,可使用key和value属性,如果是引用,可以用key-ref和value-ref定义。
            <bean id="sequenceGenerator"
    class="com.jackie.codeproject.springrecipesnote.springioc.SequenceGenerator">
    <property name="suffixes">
    <map>
    <entry key="type" value="A" />
    <entry key="url" >
    <bean class="java.net.URL">
    <constructor-arg value="http" />
    <constructor-arg value="www.apress.com" />
    <constructor-arg value="/" />
    </bean>
    </entry>
    </map>
    </property>
    <property name="initial" value="100000" />
    </bean>
            java.util.Properties集合非常接近于Map,它也实现了java.util.Map接口,并且以键值对的形式存储项目。唯一的不同是Properties集合的关键字和值始终是字符串。为了在Spring中定义java.util.Properties集合,使用<props>标记,以多个<prop>标记作为子项目。每个<prop>标记必须定义一个key属性并包含对应的值。
           <bean id="sequenceGenerator"
    class="com.jackie.codeproject.springrecipesnote.springioc.SequenceGenerator">
    <property name="suffixes">
    <props>
    <prop key="type">A</prop>
    <prop key="url">http://www.apress.com/</prop>
    <prop key="null">null</prop>
    </props>
    </property>
    <property name="initial" value="100000" />
    </bean>
            如果使用继承定义Bean,子bean的集合可以通过设置merge属性为true与父Bean合并。对于List集合,子元素将附加在父元素之后保持顺序。对于Set或Map集合,如果值相同,子元素将覆盖父元素。

         
  • 相关阅读:
    【bzoj3172】 Tjoi2013—单词
    【bzoj2434】 Noi2011—阿狸的打字机
    【bzoj1030】 JSOI2007—文本生成器
    【bzoj2001】 Hnoi2010—City 城市建设
    【bzoj3196】 Tyvj1730—二逼平衡树
    【bzoj3932】 CQOI2015—任务查询系统
    【bzoj3224】 Tyvj1728—普通平衡树
    【bzoj3514】 Codechef MARCH14 GERALD07加强版
    maven build脚本笔记
    jvm参数
  • 原文地址:https://www.cnblogs.com/xinyuyuanm/p/3020217.html
Copyright © 2011-2022 走看看