Spring4.3学习之依赖注入和控制反转

直接值引用:

idref元素:

  idref只是简单的以误差检测的方式将容器中其他bean的id(字符串值而非引用bean)传递给<constructor-arg/><property/> 元素可以检测bean是否已经存在,类似于value属性,但是比其更好,因为能在容器部署时检查所引用http://i.cnblogs.com/EditPosts.aspx?opt=1bean是否已经存在。

  注意,从4.0开始不再支持idref元素的local属性,因为其不支持正则形式的参考bean,可用idref bean属性代替。

引用其他的beans:

ref元素:

ref元素是<constructor-arg/>和<property/>里面的最终元素。能够引用容器管理的其他bean来设置指定的属性值。引用bean依赖于这个属性是否设置,且必须在属性设置之前初始化。(如果collaborator是一个singleton bean,其可能已经被容器初始化了。)所有的引用最后都是引用另一个对象。scopeing和validation依赖于是否指定id/name的对象通过bean,local,或parent属性。

  通过bean标签的<ref/>属性指定目标bean是最常用的形式,而已创建在同一容器或父容器中的任意bean,不管是否在同一个xml文件中。ref中的bean属性相当于id/name属性。

通过parent属性创建一个在父容器中的bean的引用。

内部bean:

<constructor-arg/>和<property/>元素中的<bean/>叫内部bean。

1 <bean id="outer" class="...">
2     <!-- instead of using a reference to a target bean, simply define the target bean inline -->
3     <property name="target">
4         <bean class="com.example.Person"> <!-- this is the inner bean -->
5             <property name="name" value="Fiona Apple"/>
6             <property name="age" value="25"/>
7         </bean>
8     </property>
9 </bean>

内部bean不需要指定id/name,如果指定容器也不会将其用着标识,也会忽视scope属性。内部bean都是匿名的且由外部bean创建。不能注入到其他bean中,或独立访问它们。通常内部bean的scope跟外部bean的一样,但是允许destruction回调的scope不同。

Collections:

  <list/>,<set/>,<map/>和<props/>元素来设置属性或参数为Java Collection形式的List,Set,Map,Properties类。

<bean id="moreComplexObject" class="example.ComplexObject">
    <!-- results in a setAdminEmails(java.util.Properties) call -->
    <property name="adminEmails">
        <props>
            <prop key="administrator">administrator@example.org</prop>
            <prop key="support">support@example.org</prop>
            <prop key="development">development@example.org</prop>
        </props>
    </property>
    <!-- results in a setSomeList(java.util.List) call -->
    <property name="someList">
        <list>
            <value>a list element followed by a reference</value>
            <ref bean="myDataSource" />
        </list>
    </property>
    <!-- results in a setSomeMap(java.util.Map) call -->
    <property name="someMap">
        <map>
            <entry key="an entry" value="just some string"/>
            <entry key ="a ref" value-ref="myDataSource"/>
        </map>
    </property>
    <!-- results in a setSomeSet(java.util.Set) call -->
    <property name="someSet">
        <set>
            <value>just some string</value>
            <ref bean="myDataSource" />
        </set>
    </property>
</bean>

 

map的key或value,set的value可以是以下的任意元素

bean|ref|idref|list|set|map|props|value|null

Collection合并:

 
posted @ 2016-04-11 11:19  luffly  阅读(359)  评论(0编辑  收藏  举报