3.3 将HelloWorld实例改为构造注入方式实现
Spring支持Set注入(setter injection)和构造注入(constructor injection),但更推荐使用Set注入。上面讲过,第2章的第一个实现HelloWorld的实例就是采用Set注入方式实现的,读者可以参看第 2章的实例。下面笔者把这个实例改为采用构造注入方式实现。改写思路是:首先修改类HelloWorld,在该类中增加一个构造方法,然后修改 Spring的配置文档config.xml,最后编写测试程序TestHelloWorld.java。
3.3.1 修改HelloWorld.java
修改com.gc.action包下的HelloWorld.java,增加一个构造方法,并把要注入的字符串msg作为参数,代码如下,在HelloWorld类中增加了一个构造方法public HelloWorld (String msg)。
//*******HelloWorld.java**************
package com.gc.action;
public class HelloWorld {
//该变量用来存储字符串
public String msg = null;
//增加了一个构造方法
public HelloWorld (String msg) {
this.msg = msg;
}
//设定变量msg的set方法
public void setMsg(String msg) {
this.msg = msg;
}
//获取变量msg的get方法
public String getMsg() {
return this.msg;
}
}
3.3.2 修改config.xml
在Spring中,利用Set注入和构造注入时,在XML配置文档中使用的语法是不一样的。修改配置文件config.xml内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<!--定义一个Bean,通过构造函数进行注入-->
<bean id="HelloWorld" class="com.gc.action.HelloWorld">
<!--通过构造函数进行注入-->
<constructor-arg index="0">
<value>HelloWorld</value>
</constructor-arg>
</bean>
</beans>
代码说明:
● constructor-arg,用来表示是通过构造方式来注入参数的。
● index="0",表示是构造方法中的第一个参数,如果只有一个参数,则可以不用设置这个属性值。
3.3.3 编写测试程序TestHelloWorld.java
修改TestHelloWorld.java,代码如下:
//******* TestHelloWorld.java**************
package com.gc.test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;
import com.gc.action.HelloWorld;
public class TestHelloWorld {
public static void main(String[ ] args) {
//通过ApplicationContext来获取Spring的配置文件
ApplicationContext actx=new FileSystemXmlApplicationContext("config.xml");
HelloWorld HelloWorld = (HelloWorld) actx.getBean("HelloWorld");
System.out.println(HelloWorld.getMsg());
}
}
3.3.4 运行测试程序并查看输出结果
在Eclipse中运行Java程序的步骤如下:
(1)确保当前在Eclipse中编辑的是TestHelloWorld.java文件。
(2)选择Run→Run As→Java Application命令,Eclipse即可运行TestHelloWorld.java。
(3)输出结果为“HelloWorld”,如图3.1所示。
图3.1 输出结果为“HelloWorld”