`

2012-03-26 14:43 spring - constructor-arg 的使用

 
阅读更多
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子标签,来指定组件的属性。 


Java代码  
<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>   



分享到:
评论

相关推荐

    spring-developing-java-applications-enterprise

    - **构造器注入**:使用构造器来注入依赖,这种方式更符合面向对象的设计原则。 - `&lt;constructor-arg&gt;`元素:用于指定构造器参数的值。 - 注入简单Java类型:可以直接设置值。 - 解决构造器参数模糊性问题: - ...

    Spring5_IOC.pdf

    - **Java配置**:使用纯Java的方式进行配置,通过`@Configuration`和`@Bean`等注解实现。 #### 三、Spring中的Bean管理 **3.1 Bean管理基础** - **Bean**:Spring中的核心组件,代表任何类型的对象。 - **Bean管理*...

    spring-redis.txt

    本文将详细解析一份关于 Spring 整合 Redis 的配置文件,帮助读者更好地理解如何在 Spring 应用中配置和使用 Redis。 #### 标题解析:Spring 整合 Redis 配置文件 此标题简明扼要地指出了配置文件的主要内容:在 ...

    spring从入门到精通精简笔记

    &lt;constructor-arg value="Hello, World!" /&gt; ``` ##### 3.3 Spring 的核心容器 - **BeanFactory**:这是一个更底层的接口,提供了对 Bean 的基本管理功能,如创建、销毁等。 - **ApplicationContext**:这是...

    我的Spring5笔记

    - **构造器注入**:使用`&lt;constructor-arg&gt;`标签来注入依赖。 - **注解配置**:这是一种更为现代且灵活的方式来管理Spring容器中的对象。 - **对象声明**:使用`@Component`、`@Service`、`@Controller`或`@...

    spring配置文件:整理总结Spring中XML配

    ### Spring配置文件:整理与总结Spring中XML配置的最佳实践 #### 概述 Spring框架作为一个强大的Java应用框架,在企业级应用开发中占据了重要的地位。它为普通的Java对象(Plain Old Java Objects, POJOs)提供了...

    Spring与Mybatis整合

    【Spring与Mybatis整合】是将Spring框架与Mybatis数据持久层框架集成的过程,以便更好地管理数据库操作。在Spring 3.1版本时,官方并未直接提供与Mybatis的集成支持,但社区开发了一个中间件使得整合变得可能。以下...

    mongodb整合spring文档

    - `mongo-java-driver`的版本选择上,请确保其兼容性,特别是当使用较新的`spring-data-mongodb`版本时,可能需要调整`mongo-java-driver`的版本。 - `spring-data-mongodb`提供了丰富的API用于操作MongoDB数据库,...

    maven-spring-ioc

    **Spring IoC 框架详解** Spring框架是Java开发中的一个核心组件,它提供了许多功能,其中最重要的一项就是Inversion of Control(IoC),也称为Dependency Injection(DI)。IoC容器是Spring的核心,它负责管理...

    Spring.net整合WCF-精简版

    - 创建代理类:使用svcutil工具或Visual Studio的添加服务引用功能生成WCF服务的客户端代理类。 - 配置Spring.NET客户端:在Spring配置文件中定义WCF服务代理的bean,并配置相应的连接参数,如服务地址、绑定类型...

    spring-beans-3.0.xsd

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

    Spring学习笔记.doc

    - `&lt;constructor-arg index="索引" type="类型"&gt;` - **基于setter方法的注入**:这种方式通过setter方法注入依赖对象。适用于可选依赖或后期可能需要更改依赖的场景。 - `属性名"&gt;` **3.3 BeanFactory与...

    链接数据库信息

    &lt;constructor-arg ref="dataSource"&gt;&lt;/constructor-arg&gt; ``` - **解析**:首先定义了一个 `BasicDataSource` 类型的数据源,然后定义了一个 `JdbcTemplate` Bean,它通过构造器注入了之前定义的数据源。 - **...

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

    《Reslet1:Reslet+Spring,构建简易Web访问》 Reslet是一个轻量级的Java框架,专门用于构建RESTful应用程序。它提供了一种简单、直观的方式来处理HTTP请求和响应,而Spring框架则是一个全面的企业级应用开发框架,...

    Spring-3.0.xsd

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

    spring约束dtd.zip

    它定义了如`&lt;bean&gt;`、`&lt;property&gt;`、`&lt;constructor-arg&gt;`等元素,为Spring容器提供了配置bean的基础。 2. `spring-mvc-4.0.xsd`:此文件服务于Spring MVC模块,定义了处理HTTP请求、视图解析、数据绑定、异常处理等...

    达内老师总结的spring笔记

    - **基于构造器的注入**:通过`&lt;constructor-arg&gt;`标签指定构造函数参数,可以按索引(index)或类型(type)指定参数值。 - **基于setter的注入**:通过`&lt;property&gt;`标签指定setter方法的属性名,注入对应的值。这是...

Global site tag (gtag.js) - Google Analytics