spring--xml--constrructor-arg属性

constrructor-arg:以构造函数的形式注册bean

可以用“type”、“index”或“name”指定传入的参数以决定使用哪个构造函数

比如有一个实体类为:

package cn.linkengine.internal.http.api.business;

/**
 * @program: internal-http-api
 * @author: yuhh
 * @create: 2018-11-02 15:41
 **/
public class Test {

    private Long id;
    private String name;

    public Test(){

    }

    public Test(Long id, String name){
        this.id = id;
        this.name = name;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

以下三种方式的效果都是相同的

以type的方式:

<bean class="cn.linkengine.internal.http.api.business.Test">
   <constructor-arg type="java.lang.String" value="yhh"></constructor-arg>
   <constructor-arg type="java.lang.Long" value="1"></constructor-arg>
</bean>

以index的形式:

<bean class="cn.linkengine.internal.http.api.business.Test">
   <constructor-arg index="0" value="1"></constructor-arg>
   <constructor-arg index="1" value="yhh"></constructor-arg>
</bean>

以name的形式:

<bean class="cn.linkengine.internal.http.api.business.Test">
   <constructor-arg name="id" value="1"></constructor-arg>
   <constructor-arg name="name" value="yhh"></constructor-arg>
</bean>

type:以参数类型来指定是用哪个构造函数,只有在所有构造函数的每个参数类型都不同的情况下才能使用,如果有构造函数为

public Test (String name, String phone)

那这个时候type就无法使用了

index:以参数位置来指定是用哪个构造函数,只有在没有相同数量参数的构造函数的情况下才能使用,如果有两个构造函数为

public Test(String phone, String name)

public Test(Long id, String name)

这个时候index就会有问题

name:以参数名来指定是用哪个构造函数,这种方式比较稳妥,不易出错

 

如果参数为对象,则需要先把对象注册为bean,再用“ref”来引用对象的bean,如

<constructor-arg ref="beanName"></constructor-arg>

如果参数是简单数据类型,则只要用“value”来指定值就行,如

<constructor-arg name="id" value="1"></constructor-arg>

如果参数是对象类型集合,则可以用“<list>”和"<ref>"来声明一个列表,如

<constructor-arg name="lists">
    <list>
        <ref bean="xx"/>
        <ref bean="yy"/>
    </list>
</constructor-arg>

如果参数是简单数据类型集合,则可以用“<list>”和“<value>”来声明一个列表,如

<constructor-arg name="lists">
    <list>
        <value>xx</value>
        <value>yy</value>
    </list>
</constructor-arg>

当然用“<set>”也是可以,用法同“<list>”,只是“<set>”会去重

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值