读书人

Spring构造器流入

发布时间: 2012-06-30 17:20:12 作者: rapoo

Spring构造器注入

(转自:http://javasight.net/2011/05/spring-contructor-inject-example/)

?

?

?

?

在本示例中你将学到如何通过构造器注入来设置bean的属性。考虑如下的User?bean类。

?

package net.javasight.designpattern.

User类有三个属性:name, age,country。所有的三个属性是通过构造器注入来设置。User的toString()方法覆盖来展示用户对象信息。

下面是beans.xml你勇于

bean中的constructor-arg元素用于通过构造器注入来设置属性。因为User类中只有一个构造器,所以该代码没有任何问题。当有相同个数的构造方法时,将会出现冲突。考虑如下代码:

        User(int age, String country) {                this.age = age;                this.country = country;        }        User(String name, String country) {                this.name = name;                this.country = country;        }

下面是配置文件。

        <bean id="user" />                <constructor-arg value="India" />        </bean>

那么现在你认为哪个构造器将被调用?第一个带有int和String参数的,是吧?但是你将惊讶于

那么现在考虑如下情况。我们在User类中有如下的构造方法

        User(String name, int age) {                this.name = name;                this.age = age;        }        User(int age, String country) {                this.age = age;                this.country = country;        }

配置文件如下.

<bean id="user" value="24" />        <constructor-arg type="java.lang.String" value="India" /></bean>

那么现在你认为哪个构造方法将被调用?第二个,是吗?但是你将又一次吃惊,这是因为在调用构造方法配置文件中定义的参数顺序不做考虑。要解决该问题,需要指定index

下面是增加了index属性的配置文件:

<bean id="user" type="int" value="24" />        <constructor-arg index="1" type="java.lang.String"                value="India" /></bean>

现在,如我们所期待的,第二个构造方法将被调用.

读书人网 >软件架构设计

热点推荐