依赖注入,可以使Bean中的属性通过Spring进行配置,从HelloWorld中可以看到,由Spring的XML配置文件决定了对象被创建时它的属性是如何被初始化的。Spring配置文件中定义Bean同时就定义了它的属性的值或引用的对象,HelloWorld中是通过Bean中的Setter方法实现的。算起来Spring中初始化类属性值有两种方法,第一种,使用Bean中的Setter方法,第二种使用类的构造方法进行初始化,Spring在配置文件中进行定义的时候同样可以定义它的构造函数所需的参数。
例如HelloWorld笔记中的MessageLooper类,初始化 numTimes属性值可以使用带有int参数的构造方法进行初始化,也可以通过XML配置文件中Bean的定义使用numTimes的Setter方法进行初始化。如下:
使用Setter初始化属性值在XML中Bean的定义示例:
使用构造函数初始化属性值:
可以注意到MessageLooper的带参构造方法的参数类型为int,上图中Spring会根据参数类型来进行转换。
以上为简单示例,如果构造方法有多个参数值,XML中定义的方法为:
对于有多个参数的构造方法使用index确定构造方法参数与定义中值的对应关系。
假如有一种情况,一个方法有两个构造方法,如下
InjectionMail类中有两个都是带有一个参数的构法方法,其中一个参数为String类型,另外一个参数为int型。对于这种情况如果仍然使用上边示例XML中Bean的构造方法定义(例如:<constructor-arg value=“235”/>),Spring将会无法分清创建对象时应该使用哪个构造方法。这时我们需要对参数类型进行定义,定义参数类型使用type属性,如下
构造方法的参数也有可能是引用变量,例如:
定义引用变量类型参数可以使用ref属性
使用<constructor-arg value=“×××” /> 定义的参数值value属性的值可以根据构造方法中定义的参数类型进行转换。以下为转换示例:
上述配置中部分参数定义的其他可选方法:
一般来说为了灵活性扩展性推荐使用setter方法对Bean的属性进行初始化。