Spring的四種注入方式
阿新 • • 發佈:2018-12-19
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