1. 程式人生 > >Spring學習之——注入方式(上)

Spring學習之——注入方式(上)

在學習注入方式之前,這裡本來要先學習一下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屬性,經測試也是沒問題的,這裡就不貼出了。