360SDN.COM

Spring Framework 5 权威指南(11)

来源:程序员阮威  2017-09-11 13:24:20    评论:0点击:

这是一个Spring 5专题系列,其诞生的动机是:

1.介绍最新版本的Spring Framework;

2.介绍最系统化的Spring Framework;

3.介绍最佳实践的Spring Framework;

   7.Dependencies 

Spring支持<property/><constructor-arg/>的简化方式,即p-namespacec-namespace

<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.xsd">

 

        <bean name="john-classic" class="com.example.Person">

            <property name="name" value="John Doe"/>

          <property name="spouse" ref="jane"/>

    </bean>

 

    <bean name="john-modern"

                class="com.example.Person"

                p:name="JohnDoe"

                p:spouse-ref="jane"/>

 

    <bean name="jane" class="com.example.Person">

        <property name="name" value="Jane Doe"/>

    </bean>

</beans>

<beans xmlns="http://www.springframework.org/schema/beans"

        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

        xmlns:c="http://www.springframework.org/schema/c"

        xsi:schemaLocation="http://www.springframework.org/schema/beans

                http://www.springframework.org/schema/beans/spring-beans.xsd">

 

    <bean id="bar" class="x.y.Bar"/>

    <bean id="baz" class="x.y.Baz"/>

 

    <!-- traditional declaration -->

    <bean id="foo" class="x.y.Foo">

        <constructor-arg ref="bar"/>

        <constructor-arg ref="baz"/>

        <constructor-arg value="foo@bar.com"/>

    </bean>

 

    <!-- c-namespace declaration -->

    <bean id="foo" class="x.y.Foo" c:bar-ref="bar" c:baz-ref="baz" c:email="foo@bar.com"/>

 

     <!-- c-namespace index declaration -->

    <bean id="foo" class="x.y.Foo" c:_0-ref="bar" c:_1-ref="baz"/>

 

</beans>

<property/>元素的name属性支持组合属性命:

<bean id="foo" class="foo.Bar">

    <property name="fred.bob.sammy" value="123" />

</bean>

foo拥有一个fred属性,fred拥有一个bob属性,bob拥有一个sammy属性,Sammy属性值为123

默认情况下,Spring容器在启动时会对所有声明为singleton作用域的bean(及其依赖)进行初始化,这样做的好处是可以尽早的发现错误。指定bean定义的lazy-init属性为true可以改变这一默认行为,当第一次请求bean时才实例化和初始化它。例如:

<bean id="lazy" class="com.foo.ExpensiveToCreateBean" lazy-init="true"/>

<bean name="not.lazy" class="com.foo.AnotherBean"/>

你也可以在<beans/>元素上进行全局的设置:

<beans default-lazy-init="true">

    <!-- no beans will be pre-instantiated... -->

</beans>

如果一个延迟初始化的bean作为另一个非延迟初始化的singletonbean的依赖,则设置的延迟初始化无效,因为要优先满足后者的的依赖。

有时候有些bean之间的依赖关系并不那么直接,不需要形成显式的依赖注入关系。这时可以为bean定义指定depends-on属性,来显式地强制先初始化被依赖的bean,销毁顺序则恰好相反。例如:

<bean id="beanOne" class="ExampleBean" depends-on="manager,accountDao">

    <property name="manager" ref="manager" />

</bean>

 

<bean id="manager" class="ManagerBean" />

<bean id="accountDao" class="x.y.jdbc.JdbcAccountDao" />

多个依赖之间可以用逗号,分号和空格分隔。

阅读原文

为您推荐

友情链接 |九搜汽车网 |手机ok生活信息网|ok生活信息网|ok微生活
 Powered by www.360SDN.COM   京ICP备11022651号-4 © 2012-2016 版权