Spring框架自學之路(四)

在第一篇教程裡(Spring框架自學之路(一))我們學習了框架概述、為MyEclipse配置Spring的約束、IOC(DI) - 控制反轉(依賴注入)的實現原理以及入門案例。

在第二篇教程裡(Spring框架自學之路(二)),講解了IOC獲取對象的方式、別名標籤、Spring創建對象的方式等內容。

在第三篇教程裡(Spring框架自學之路(三)),學習了單例和多例、懶加載機制、配置初始化和銷燬的方法。下面緊接著開始Spring框架第四篇教程的學習。

步驟一:Spring DI

1.IOC(DI) - 控制反轉(依賴注入)

所謂的IOC稱之為控制反轉,簡單來說就是將對象的創建的權利及對象的生命週期的管理過程交由Spring框架來處理,從此在開發過程中不再需要關注對象的創建和生命週期的管理,而是在需要時由Spring框架提供,這個由spring框架管理對象創建和生命週期的機制稱之為控制反轉。而在 創建對象的過程中Spring可以依據配置對對象的屬性進行設置,這個過稱之為依賴注入,也即DI。

2.set方法注入

通常的javabean屬性都會私有化,而對外暴露setXxx()getXxx()方法,此時spring可以通過這樣的setXxx()方法將屬性的值注入對象。

a.Spring內置的可直接注入類型的注入:

<code>import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.Set;
public class Hero {
private int id;
private String name;
private List<string> jobs;
private Set<string> set;
private Map<string> map;
private Properties prop;
public void setId(int id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
}
public void setJobs(List<string> jobs) {
this.jobs = jobs;
}
public void setSet(Set<string> set) {
this.set = set;
}
public void setMap(Map<string> map) {
this.map = map;
}
public void setProp(Properties prop) {
this.prop = prop;
}
@Override
public String toString() {
return "Hero [id=" + id + ", name=" + name + ", jobs=" + jobs
+ ", set=" + set + ", map=" + map + ", prop=" + prop + "]";
}
}/<string>/<string>/<string>/<string>/<string>/<string>/<code>


<code>
<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-3.2.xsd"
>

<bean>
<property>
<property>
<property>
<list>
<value>上單/<value>
<value>打野/<value>
<value>輔助/<value>
<value>中單/<value>
/<list>
/<property>
<property>

<value>aaa/<value>
<value>bbb/<value>
<value>ccc/<value>
<value>aaa/<value>

/<property>
<property>

<entry>
<entry>
<entry>
<entry>

/<property>
<property>
<props>
<prop>v1/<prop>
<prop>v2/<prop>
<prop>v3/<prop>
<prop>v4/<prop>
/<props>
/<property>
/<bean>
/<beans>/<code>
<code>@Test
/**
* SpringDI set方式屬性注入 - Spring內置的可直接注入類型的注入
*/
public void test1(){
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");

Hero hero = (Hero) context.getBean("hero");
System.out.println(hero);
}/<code>

b.非Spring內置的可以直接注入類型的注入:

<code>
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.Set;
public class Hero {
private int id;
private String name;
private List<string> jobs;
private Set<string> set;
private Map<string> map;
private Properties prop;
private Dog dog;
private Cat cat;
public void setId(int id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
}
public void setJobs(List<string> jobs) {
this.jobs = jobs;
}
public void setSet(Set<string> set) {
this.set = set;
}
public void setMap(Map<string> map) {
this.map = map;
}
public void setProp(Properties prop) {
this.prop = prop;
}
public void setDog(Dog dog) {
this.dog = dog;
}
public void setCat(Cat cat) {
this.cat = cat;
}
@Override
public String toString() {
return "Hero [id=" + id + ", name=" + name + ", jobs=" + jobs

+ ", set=" + set + ", map=" + map + ", prop=" + prop + ", dog="
+ dog + ", cat=" + cat + "]";
}
}/<string>/<string>/<string>/<string>/<string>/<string>/<code>

3.基於構造方法的注入

對象屬性設置的另一種方式是在對象創建的過程中通過構造方法傳入並設置對象的屬性。spring也可以通過這樣的構造方法實現屬性的注入。

<code>public class Student {
private int id;
private String name;
private Dog dog;
public Student(int id, String name, Dog dog) {
this.id = id;
this.name = name;
this.dog = dog;
}
@Override
public String toString() {
return "Student [id=" + id + ", name=" + name + ", dog=" + dog + "]";
}
}/<code>
<code>
<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-3.2.xsd"
>
<bean>

<constructor-arg>
<constructor-arg>
<constructor-arg>
/<bean>
<bean>
/<beans>/<code>

4.自動裝配

在Spring的set方式實現的注入過程中,支持自動裝配機制,所謂自動裝配機制,會根據要設置的javabean屬性的名字 或 類型 到spring中自動尋找對應id 或 類型的<bean>進行設置,從而 省去依次配置的過程,簡化了配置。為 指定<bean>開啟自動裝配:/<bean>/<bean>

<code>
<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-3.2.xsd"
>

<bean>
<bean>
<bean>
/<beans>/<code>

關注公眾號【禿頭程序員】,不錯過Spring框架自學之路(四)


分享到:


相關文章: