1. 程式人生 > >Spring的四種注入方式

Spring的四種注入方式

1,set注入方式:比較常用,比較簡單(推薦)

    (1)編寫一個簡單的javabean類

package cn.zhong.com.spring.user;

import cn.zhong.com.spring.car.Car;

public class User {
	private String username ;
	private String password;
	private String sex;
	private int age;
	private Car car;

	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	public String getSex() {
		return sex;
	}
	public void setSex(String sex) {
		this.sex = sex;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public void init(){
		System.out.println("物件初始化!");
	}
	public void destroy(){
		System.out.println("物件銷燬");
	}
	public Car getCar() {
		return car;
	}
	public void setCar(Car car) {
		this.car = car;
	}
	@Override
	public String toString() {
		return "User [username=" + username + ", password=" + password + ", sex=" + sex + ", age=" + age + ", car="
				+ car + "]";
	}
}

 (2) 在配置方法中set方法注入

<!--set方法注入 bean裡面name是你建立的名稱空間,class為你要建立類的路徑-->
<!--property裡面以鍵值對的形式存在,name對應class裡面的屬性名 ,value表示為此屬性賦值-->
 <bean name="user" class="cn.zhong.com.spring.user.User">
      <property name="username" value="tom"></property>
      <property name="age" value="18"></property>
      <property name="car" ref="car"></property>
</bean> 

(3)編寫一個簡單的測試方法:

package cn.zhong.com.spring.test;

import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import cn.zhong.com.spring.factory.UserFactory;
import cn.zhong.com.spring.user.User;


public class Test1 {
	@Test
	public void fun1(){
			//1 建立容器物件
		ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
			//2 向容器"要"user物件
		User u = (User) ac.getBean("user");
			//3 列印user物件
		System.out.println(u);
		// 關閉容器
		ac.close();
		}
}

測試結果:

 2,構造器注入:(不經常用,使用時需要注意)

(1)類裡面必須含有一個構造器:


	//構造器
	public User(String username, Car car) {
		super();
		this.username = username;
		this.car = car;
	}

(2)編寫對應的配置檔案

<!-- 構造方法注入 ,類方法中必須含有一個構造器-->
<!-- constructor-arg name 為類的屬性值,index為構造器中名為name屬性的位置下標 value表示賦的值-->
<bean name = "user" class="cn.zhong.com.spring.user.User">
     <constructor-arg name="username" index="0" value="tom"></constructor-arg>
     <constructor-arg name="car" index="1" ref="car"></constructor-arg>
</bean> 

(3)測試結果:

3,p空間注入:(spring新推出的方法,但是之前的set方法比較適應人心,因此沒得到推廣,一般的不使用此方法)

    (1)p名稱空間匯入約束;

 (2)配置和set方法類似,但是比set方法簡單(set方法結構嚴謹),大家也可以嘗試一下。

<!-- p名稱空間注入,和set注入格式差不多,簡單明瞭 -->
<!-- <bean name="user" class="cn.zhong.com.spring.user.User" 
    p:username="jeck" p:car-ref="car"
></bean>
 -->

4,spel表示式注入:這個和EL表示式相似,它引用我們之前建立的類的各個屬性名稱:

    <!-- spel表示式和EL表示式很類似,引用之前我們建立的類的各個屬性名稱 -->
      <bean name="user" class="cn.zhong.com.spring.user.User">
      <!--引用之前我建立car的name名稱,賦值給User.name -->
      <property name="username" value="{car.name}"></property>
      <property name="age" value="18"></property>
      <!-- 引用型別 和上面的一樣, -->
      <property name="car" ref="car"></property>
      </bean> 

注意:引用型別:car(這個是我建立的一個car類)這user裡面引用,引用時必須使用:ref