Spring控制翻转中的依赖注入方式

依赖注入是指对象之间关系的控制权由应用代码中转到外部容器。Spring框架主要提供了Set注入和构造注入两种依赖注入方式。


一:在Myeclipse中(笔者使用的是Myeclipse10版本)新建一个项目(java project或者web project都可)


二:右键项目 - MyEclipse - Add Spring Capabilities(添加Spring支持),选择3.0版本并添加引用核心类库,点击下一步。

           

三:选择新创建一个spring bean 配置文件放到项目src目录下。


四:点击下一步,指定Hibernate 配置页,直接默认,点击完成即可。


五:新建类 HelloWorld.java


package com.xiami.spring;

public class HelloWorld {

	private String str;

	/**
	 * 默认构造方法
	 */
	public HelloWorld() {
	}

	/**
	 * 用来进行构造注入的构造方法
	 * 
	 * @param str
	 */
	public HelloWorld(String str) {
		this.str = str;
	}

	/**
	 * 用来进行Set注入的方法
	 * @param str
	 */
	public void setStr(String str) {
		this.str = str;
	}

	/**
	 * 输出字符串的方法
	 */
	public void sayHello() {
		System.out.println(str);
	}
}



六:新建测试类Test.java


package com.xiami.spring;

import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.ClassPathResource;

public class Test {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//载入spring配置文件
		BeanFactory bFactory = new XmlBeanFactory(new ClassPathResource("applicationContext.xml"));
		HelloWorld helloWorld = (HelloWorld) bFactory.getBean("helloService");
		helloWorld.sayHello();
	}

}



七:此时项目结构如下



八:打开applicationContext.xml文件,进行添加bean配置

以下是两种方式添加bean:

1:采用Set注入方式的Bean类的配置

右击applicationContext.xml的编辑界面 - Spring - new bean 打开Bean向导窗口,填写Bean Id(自定义命名和Test.java中getBean("???")对应。Bean class 选择要注入的HelloWorld类。点击Properties属性选项卡,给该bean新建一个属性。



九:在属性向导窗口填写 Name 对应HelloWorld.java中的属性名称,Spring Type 选择value,type选择String,Value 随便填值。 finish 既可。


十:保存applicationContext.xml, 添加bean后,配置文件多了红色标记的部分,读者可以运行Test.java。测试一下。发现hello world 字符串已经注入到了str变量上。

<?xml version="1.0" encoding="UTF-8"?>
<beans
	xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:p="http://www.springframework.org/schema/p"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

	
	<!-- 使用Set方式注入 -->
	<!-- 
	<span style="color:#ff0000;"><bean id="helloService" class="com.xiami.spring.HelloWorld"
		abstract="false" lazy-init="default" autowire="default">
		<property name="str">
			<value type="java.lang.String">hello world</value>
		</property>
	</bean></span>
	 -->
	 
	 <!-- 使用构造方法方式注入 
	 <bean id="helloService" class="com.xiami.spring.HelloWorld"
	 	abstract="false" lazy-init="default" autowire="default">
	 	<constructor-arg>
	 		<value type="java.lang.String">构造方法注入方式</value>
	 	</constructor-arg>
	 </bean>
	 -->
	 
	 </beans>



2:采用构造注入方式的Bean类的配置

在以上Set方式的Bean Wizard(Bean 向导)窗口,不选择Properties选项卡,变为Constructor Args选项卡。并Add 新增一个构 造参数。Index和Java Class 不用填写。



十一:在增加构造方式bean的时候,之前第一个得先注释或者删除,不允许有多个id相同的bean。