在学习注入方式之前,这里本来要先学习一下bean.xml配置文件的属性作用,但是我觉得只是单纯的介绍bean的一些属性,很枯燥并且又不太容易具体的理解,所以我打算在学习注入方式的时候将bean配置的一些属性介绍顺便穿插进去,这样结合具体的示例程序可能理解起来更加容易,好了,开始我们今天的学习。很多的资料介绍Spring的注入方式都是说有三种:接口注入,构造注入,Setter注入。但是对于接口注入的表达都不太清晰,所以我便查阅了Spring2.5的官方手册,发现并没有这种明确的划分,所以我这里也遵循官方文档中的介绍,来一步一步的学习。首先是构造注入,所谓构造注入,简单的说就是运用构造器的方式注入。
下面这个示例程序,实现对基本数据类型的构造注入:
Java类:
package cn.com.spring.bean;
public class ExampleBean {
private int i;
private String s;
private long l;
private char c;
private boolean flag;
private short sh;
private double d;
private float f;
public ExampleBean(int i, String s, long l, char c, boolean flag, short sh, double d, float f){
this.i = i;
this.s = s;
this.l = l;
this.c = c;
this.flag = flag;
this.sh = sh;
this.d = d;
this.f = f;
}
public String toString() {
String str = "int i: "+String.valueOf(i)+"\nString s: "+s+"\nlong l: "+l+"\nchar c: "+c+"\nboolean flag: "+String.valueOf(flag)+"\nshort sh: "+sh+"\ndouble d: "+d+"\nfloat f: "+f;
return str;
}
}
bean配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
<description>Spring Quick Start!!</description>
<bean id="exampleBean" class="cn.com.spring.bean.ExampleBean">
<constructor-arg type="int" value="100"/>
<constructor-arg type="java.lang.String" value="test"/>
<constructor-arg type="long" value="25000"/>
<constructor-arg type="char" value="c"/>
<constructor-arg type="boolean" value="false"/>
<constructor-arg type="short" value="88"/>
<constructor-arg type="double" value="88.88"/>
<constructor-arg type="float" value="88.8"/>
</bean>
</beans>
测试程序,我这里依然选择使用Junit来进行测试,测试程序如下:
package cn.com.spring.test;
import junit.framework.TestCase;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;
import cn.com.spring.bean.ExampleBean;
public class TestUtils extends TestCase {
private ApplicationContext actx = new FileSystemXmlApplicationContext("bean.xml");
@Test
public void test1(){
ExampleBean exampleBean = (ExampleBean)actx.getBean("exampleBean");
System.out.println(exampleBean.toString());
}
}
通过运行得到的结果如下:
int i: 100
String s: test
long l: 25000
char c: c
boolean flag: false
short sh: 88
double d: 88.88
float f: 88.8
以上就是构造注入对于基本类型的实现方式。
这里Spring支持三种不同的bean配置文件的书写方式,本例中可将bean配置文件改写成以下两种方式,都是可以的
一种是:
<bean id="exampleBean" class="cn.com.spring.bean.ExampleBean">
<constructor-arg type="int">
<value>100</value>
</constructor-arg>
<constructor-arg type="java.lang.String">
<value>test</value>
</constructor-arg>
<constructor-arg type="long">
<value>25000</value>
</constructor-arg>
<constructor-arg type="char">
<value>c</value>
</constructor-arg>
<constructor-arg type="boolean">
<value>false</value>
</constructor-arg>
<constructor-arg type="short">
<value>88</value>
</constructor-arg>
<constructor-arg type="double">
<value>88.88</value>
</constructor-arg>
<constructor-arg type="float">
<value>88.8</value>
</constructor-arg>
</bean>
另外一种就是:
<bean id="exampleBean" class="cn.com.spring.bean.ExampleBean">
<constructor-arg index="0" value="100"/>
<constructor-arg index="1" value="test"/>
<constructor-arg index="2" value="25000"/>
<constructor-arg index="3" value="c"/>
<constructor-arg index="4" value="false"/>
<constructor-arg index="5" value="88"/>
<constructor-arg index="6" value="88.88"/>
<constructor-arg index="7" value="88.8"/>
</bean>
事实上通过以上的演示,大家很容易看出还存在另外一种组合,就是将第二种的type属性替换成最后一种的index属性,经测试也是没问题的,这里就不贴出了。