`

spring constructor-arg

 
阅读更多
转:http://hi.baidu.com/tjx1222/blog/item/66dce1458142e12ecefca369.html
Spring使用spring-beans.dtd文件来定义BeanFactory的XML配置规范。可以在http://www.springframework.org/dtd/spring-beans.dtd找到该dtd文件,当然,Spring的下载文件中也已经包含了该dtd文件。它被放在dist文件夹中。
      配置文件的根元素是beans,每个组件使用bean元素来定义,bean元素可以有许多属性,其中有两个是必须的:id和class(这里说的id是必须的并不意味着在配置文件中必须指定id,后面会详细说明)。id表示组件的默认名称,class表示组件的类型。
      如果使用设值注入,则需要使用property子标签,来指定组件的属性。
<bean id="renderer" class="com.apress.prospring.ch2.StandardOutMessageRenderer">
    <property name="messageProvider">
        <ref local="provider"/>
    </property>
</bean>
     // 使用构造子注入时,则使用constructor-arg子标签,来指定构造函数的参数。
<bean id="provider" class="com.apress.prospring.ch4.ConfigurableMessageProvider">
    <constructor-arg>
        <value>This is a configurable message</value>
    </constructor-arg>
</bean>
      //当构造函数有多个参数时,可以使用constructor-arg标签的index属性,index属性的值从0开始。
<bean id="provider" class="com.apress.prospring.ch4.ConfigurableMessageProvider">
    <constructor-arg index="0">
        <value>first parameter</value>
    </constructor-arg>
    <constructor-arg index="1">
        <value>second parameter</value>
    </constructor-arg>

</bean>
    // 在使用构造子注入时,需要注意的问题是要避免构造子冲突的情况发生。考虑下面的情况:
public class ConstructorConfusion {
    public ConstructorConfusion(String someValue) {
        System.out.println("ConstructorConfusion(String) called");
    }
    public ConstructorConfusion(int someValue) {
        System.out.println("ConstructorConfusion(int) called");
    }
}
    // 使用如下配置文件
<bean id="constructorConfusion" class="com.apress.prospring.ch4.ConstructorConfusion">
    <constructor-arg>
        <value>90</value>
    </constructor-arg>
</bean>
    // 那么,当实例化组件constructorConfusion时,将输出ConstructorConfusion(String) called,也就是说参数类型为String的构造函数被调用了,这显然不符合我们的要求。为了让Spring调用参数为int的构造函数来实例化组件constructorConfusion,我们需要在配置文件中明确的告诉Spring,需要使用哪个构造函数,这需要使用constructor-arg的type属性。
<bean id="constructorConfusion" class="com.apress.prospring.ch4.ConstructorConfusion">
    <constructor-arg type="int">
        <value>90</value>
    </constructor-arg>
</bean>
     //我们不仅可以构造单个BeanFactory,而且可以建立有继承关系的多个BeanFactory。只需要将父BeanFactory作为参数传给子BeanFactory的构造函数即可。
BeanFactory parent =
    new XmlBeanFactory(new FileSystemResource("./ch4/src/conf/parent.xml"));
BeanFactory child =
    new XmlBeanFactory(new FileSystemResource("./ch4/src/conf/beans.xml"), parent);
     //如果子BeanFactory和父BeanFactory中含有名称相同的Bean,那么在子BeanFactory中使用
<ref bean="sameNameBean"/>//引用的将是子BeanFactory中的bean,为了引用父BeanFactory中的bean,我们需要使用ref标签的parent属性,<ref parent="sameNameBean"/>。
     为了注入集合属性,Spring提供了list,map,set和props标签,分别对应List,Map,Set和Properties,我们甚至可以嵌套的使用它们(List of Maps of Sets of Lists)。
<bean id="injectCollection" class="com.apress.prospring.ch4.CollectionInjection">
    <property name="map">
        <map>
            <entry key="someValue">
                <value>Hello World!</value>
            </entry>
            <entry key="someBean">
                <ref local="oracle"/>
             </entry>
        </map>
    </property>
    <property name="props">
        <props>
            <prop key="firstName">
                Rob
            </prop>
            <prop key="secondName">
                Harrop
            </prop>
        </props>
    </property>
    <property name="set">
        <set>
            <value>Hello World!</value>
            <ref local="oracle"/>
        </set>
    </property>
    <property name="list">
        <list>
            <value>Hello World!</value>
            <ref local="oracle"/>
         </list>
    </property>
</bean>
/*************************

type 的值定义的类型必须与构造器定义的类型一致,并且不支持类型的自动包装
分享到:
评论

相关推荐

    spring mvc 集成elasticSearch 5.5.0版本

    &lt;constructor-arg name="client" ref="elasticsearchClient" /&gt; &lt;constructor-arg&gt; &lt;bean class="org.elasticsearch.common.settings.ImmutableSettings" factory-method="settings"&gt; &lt;constructor-arg&gt; ...

    Spring自学笔记-Ioc(控制反转)容器

    &lt;constructor-arg type="java.lang.String" value="XXX"/&gt; ``` - **通过索引指定参数** 也可以通过索引来指定构造函数参数的顺序: ```xml &lt;constructor-arg index="0" value="258"/&gt; &lt;constructor-...

    spring-beans-3.0.xsd

    此外,`&lt;constructor-arg&gt;`和`&lt;property&gt;`支持了`ref`和`value`的简写形式,使得配置更简洁。 `spring-beans-3.1.xsd`还引入了`profile`概念,允许开发者根据不同的环境条件选择加载不同的bean配置,增强了部署的...

    spring集成redis单节点、集群、哨兵配置

    &lt;constructor-arg&gt; &lt;value&gt;localhost:7000 &lt;value&gt;localhost:7001 &lt;!-- 添加其他节点... --&gt; &lt;/constructor-arg&gt; ``` 最后,我们讨论**哨兵(Sentinel)配置**。哨兵系统用于监控、故障检测和自动故障...

    spring-ldap-1.3.1.RELEASE-with-dependencies.zip

    &lt;constructor-arg ref="contextSource"/&gt; &lt;list&gt;&lt;value&gt;uid={0},ou=users,dc=example,dc=com&lt;/value&gt;&lt;/list&gt; &lt;/constructor-arg&gt; &lt;constructor-arg&gt; &lt;bean class="org.springframework.security.ldap....

    spring-context-4.2.xsd.zip

    开发者可以通过`class`属性指定bean的实现类,通过`&lt;property&gt;`或`&lt;constructor-arg&gt;`子元素来注入依赖。此外,`&lt;bean&gt;`元素还支持通过`init-method`和`destroy-method`属性指定bean的初始化和销毁方法,以进行...

    Spring--2.Spring 中的 Bean 配置-2-1

    - 对于需要通过构造函数创建的对象,可以使用`&lt;constructor-arg&gt;`标签。例如: ```xml &lt;constructor-arg value="exampleValue1"/&gt; &lt;constructor-arg value="exampleValue2"/&gt; ``` 4. **依赖查找与自动装配...

    spring + redis + sentinel 配置

    &lt;constructor-arg name="master"&gt; ${sentinel.master} &lt;/constructor-arg&gt; &lt;constructor-arg&gt; &lt;constructor-arg&gt; &lt;/constructor-arg&gt; &lt;/constructor-arg&gt; ``` 2. 创建`StringRedisTemplate`或`...

    spring与thrift集成

    &lt;constructor-arg ref="calculatorProcessor" /&gt; &lt;/constructor-arg&gt; &lt;constructor-arg value="9090" /&gt; ``` 5. **启动 Thrift 服务**:在 Spring 应用启动时,通过调用 `TServer.start()` 方法启动 ...

    Spring项目bean实例化代码

    在Spring配置文件中,可以通过`&lt;bean&gt;`标签的`constructor-arg`子标签来指定构造函数参数,Spring会根据这些参数调用相应的构造函数来创建Bean实例。例如: ```xml &lt;constructor-arg value="param1"/&gt; ...

    Spring-3.0.xsd

    4. `&lt;constructor-arg&gt;`:用于传递构造函数参数,与`&lt;property&gt;`类似,但它是针对构造函数的。 5. `&lt;aop:config&gt;`:定义AOP(面向切面编程)的配置,包括切点、通知和顾问等。 6. `&lt;tx:annotation-driven&gt;`:启用...

    ssm整合redis1

    &lt;constructor-arg name="host" value="192.168.152.180"&gt;&lt;/constructor-arg&gt; &lt;constructor-arg name="port" value="6379"&gt;&lt;/constructor-arg&gt; ``` 这些配置文件演示了如何初始化Jedis连接池,并将其交给Spring...

    spring applicationContext 配置文件

    &lt;constructor-arg type="java.lang.String"&gt; &lt;value&gt;jxg/Qr4VbxU= &lt;/constructor-arg&gt; &lt;!-- password --&gt; &lt;constructor-arg type="java.lang.String"&gt; &lt;value&gt;jxg/Qr4VbxU= &lt;/constructor-arg&gt; &lt;!--...

    Springjava.pdf

    &lt;constructor-arg&gt;&lt;ref bean="helloService"/&gt;&lt;/constructor-arg&gt; ``` 对应的类`ConstructorHelloAction`中,我们需要创建一个带参数的构造函数来接受注入的对象: ```java private HelloServiceImpl ...

    <Reslet1>:Reslet+Spring,配置简单web访问

    &lt;/constructor-arg&gt; &lt;constructor-arg&gt; &lt;constructor-arg&gt; &lt;value&gt;http&lt;/value&gt; &lt;/constructor-arg&gt; &lt;constructor-arg&gt; &lt;value&gt;8080 &lt;/constructor-arg&gt; &lt;/constructor-arg&gt; ``` 步骤三:定义Reslet...

    Spring.Net教程(4)对象的创建

    这通常通过`&lt;object&gt;`标签实现,指定`type`属性为要创建的对象类型,并可以使用`constructor-arg`子元素提供构造函数参数。例如: ```xml , MyAssembly"&gt; &lt;constructor-arg index="0" value="param1"/&gt; ...

    spring01-1

    通过 `&lt;property&gt;` 或 `&lt;constructor-arg&gt;` 标签,我们可以将依赖注入到 Bean 中。这使得我们的代码更加灵活,易于测试和维护。 在不使用注解的情况下,我们还需要使用 Spring 容器(ApplicationContext)来加载 ...

    elasticsearch+spring小案例

    &lt;constructor-arg name="client" ref="client"/&gt; &lt;bean id="client" class="org.springframework.data.elasticsearch.client.ClientConfigurationBuilder" factory-method="build"&gt; &lt;constructor-arg&gt; &lt;value&gt;...

    Spring-从入门到精通.ppt

    内部Bean是指在或&lt;constructor-arg&gt;元素中使用元素再定义一个Bean。内部Bean的scope、id、name属性会被忽略,内部Bean总是prototype(原型)模式,内部Bean不能在包含该内部Bean的Bean之外依赖注入。 集合依赖注入 ...

Global site tag (gtag.js) - Google Analytics