Spring學習之——注入方式(上)
阿新 • • 發佈:2019-01-27
在學習注入方式之前,這裡本來要先學習一下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屬性,經測試也是沒問題的,這裡就不貼出了。