美文网首页
spring构造函数注入

spring构造函数注入

作者: jkzhao0815 | 来源:发表于2018-01-17 11:08 被阅读0次
    Spring 构造函数注入

    在这个例子中我们将通过构造函数注入设置bean属性。先看一下下面的User bean类。

    [java]view plaincopy

    packagecom.vaannila;

    publicclassUser{

    privateStringname;

    privateintage;

    privateStringcountry;

    User(Stringname,intage,Stringcountry)

    {

    this.name=name;

    this.age=age;

    this.country=country;

    }

    publicStringtoString(){

    returnname+"is"+age+"yearsold,livingin"+country;

    }

    }

    User bean类有三个属性,即:name, age和country。这三个属性都是通过setter注入来进行设置的。User bean类的toString()方法被重载来展示User对象。

    bean.xml用来配置spring bean。下面的代码说明设置属性的值直至setter注入。

    [xhtml]view plaincopy

    <?xmlversion="1.0"encoding="UTF-8"?>

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

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd">

    <beanid="user"class="com.vaannila.User">

    <constructor-argvalue="Eswar"/>

    <constructor-argvalue="24"/>

    <constructor-argvalue="India"/>

    </bean>

    </beans>

    在bean元素中的constructor-arg元素用来设置属性值直至构造函数注入。当User bean类中有一个构造函数,这个代码将会正常工作。当有另外一个有相同参数数量的构造函数,将会产生错误,参考一下代码:

    [java]view plaincopy

    User(intage,Stringcountry)

    {

    this.age=age;

    this.country=country;

    }

    User(Stringname,Stringcountry)

    {

    this.name=name;

    this.country=country;

    }

    bean的配置文件:

    [xhtml]view plaincopy

    <beanid="user"class="com.vaannila.User">

    <constructor-argvalue="24"/>

    <constructor-argvalue="India"/>

    </bean>

    现在哪个构造函数将被调用?调用第一个int和String参数的构造函数是正确的,但是事实上将调用第二个构造函数。虽然我们知道第一个参数是int类型,第二个参数是String类型,但是Spring将他们都解释为Spring参数。为了避免这种情况,需要指定constructor-arg元素的type属性。现在bean配置属性如下,第一个构造函数将被调用。

    [xhtml]view plaincopy

    <beanid="user"class="com.vaannila.User">

    <constructor-argtype="int"value="24"/>

    <constructor-argtype="java.lang.String"value="India"/>

    </bean>

    我们将User bean类的构造函数改为如下的情况:

    [java]view plaincopy

    User(Stringname,intage)

    {

    this.name=name;

    this.age=age;

    }

    User(intage,Stringcountry)

    {

    this.age=age;

    this.country=country;

    }

    现在哪个构造函数将被调用那?调用第二个构造函数是正确的,但是实际情况是第一个构造函数被调用。这是因为当构造函数被调用的时候,在bean配置文件不会考虑参数出现的顺序。为了解决这个问题我们可以指定构造函数参数的索引数。

    bean配置文件如下:

    [xhtml]view plaincopy

    <beanid="user"class="com.vaannila.User">

    <constructor-argindex="0"type="int"value="24"/>

    <constructor-argindex="1"type="java.lang.String"value="India"/>

    </bean>

    相关文章

      网友评论

          本文标题:spring构造函数注入

          本文链接:https://www.haomeiwen.com/subject/eliyoxtx.html