Spring框架入門之Spring IOC(XML)& Bean工廠
1、Spring框架入門之Spring IOC(XML)& Bean工廠
1.1 什麼是Spring框架?
Spring是一個開源框架,Spring是於2003年興起的一個輕量級的Java開發框架,由Rod Johnson建立。簡單來說,Spring是一個分層的JavaSE/EE full-stack(一站式)輕量級開源框架。一站式框架是指有EE開發的每一層解決方案:
- WEB層:SpringMVC
- Service層:Spring的Bean管理,Spring宣告式事務
- DAO層:Spring的JDBC模板,Spring的ORM模組
目前Spring有兩個版本:Spring3.X 和 Spring4.X,這裡我們將展開Spring4.X的學習。
1.2 為什麼學習Spring框架?
1.3 如何學習Spring框架?
Spring框架下擁有9大模組,對於小白來講還是從IOC來進行入門學習的。我們可以從Spring的官網:http://spring.io/來下載spring4.X的開發包,下載並解壓後可以看到如下目錄:
在spring-framework-4.2.4.RELEASE-dist目錄下有全部的Spring檔案:
- docs:Spring的開發文件和API
- libs:Spring的開發jar包
- schema:包含Spring的各種配置檔案的約束
下面開始學習Spring 的IOC模組,加油騷年們!
1.3.1 什麼是IOC?
Spring IOC就是Spring框架中底層的Core Container中的內容;IOC(inversion of control)控制反轉,是將物件的建立權反轉交給Spring來管理。在實際的開發中,如果底層的實現切換了,需要修改原始碼?大部分的Demo都是需要的,這是因為程式碼模組之間的耦合度太高,有的甚至牽一髮而動全身,顯然這樣的情景放在實際企業級開發中是非常糟糕的,為了實現不修改程式碼(低耦合性),在Spring框架中就引入了工廠
1.3.2 使用Spring IOC
建立web專案並引入對應IOC支援的jar包:
建立介面和實現多個實現類(便於測試):
public interface UserDao{
public void save();
}
public class UserDaoImpl1 implements UserDao{
public void save()
{
System.out.println(“UserDaoImpl1執行了。。。”);
}
}
public class UserDaoImpl2 implements UserDao{
public void save()
{
System.out.println(“UserDaoImpl2執行了。。。”);
}
}
建立applicationContext.xml檔案:
參考spring的解壓路徑下spring-framework-4.2.4.RELEASE\docs\spring-framework-reference\html\xsd-configuration.html來編寫applicationContext.xml檔案
編寫測試類:
ApplicationContext applicationContext=new ClassPathXmlApplicationContext(“applicationContext.xml”);
UserDao userDao = (UserDao)applicationContext.getBean(UserDao.class);
userDao.save( );
引入Spring IOC後我們就可以通過更改applicationContext.xml檔案中Bean的配置來切換userDao.save();實際呼叫的是實現類中的具體save方法。
1.3.3 IOC和DI
- IOC:控制反轉,將物件的建立權反轉給了Spring。
- DI:依賴注入,前提必須有IOC的環境,Spring管理這個類的時候將類的依賴的屬性注入(設定)進來。
- 面向物件的時候
依賴
Class A{
}
Class B{
public void xxx(A a){
}
}
繼承:is a(介面:like a)
Class A{
}
Class B extends A{
}
聚合:has a
1.3.4 Spring工廠類
Spring工廠類的結構圖:
由圖:
- BenaFactory(老版本的工廠):在呼叫getBean()時才生成類的例項。
- ApplicationContext(新版本的工廠):在載入配置檔案時就將Sping管理的類例項化,ApplicationContext中有兩個實現類:
- ClassPathXmlApplicationContext:載入類路徑下的配置檔案
- FileSystemXmlApplicationContext:載入系統路徑下的配置檔案
1.3.5 Bean配置
<bean>標籤的id和name的配置
- id :使用了約束中的唯一約束。裡面不能出現特殊字元的。
- name :沒有使用約束中的唯一約束(理論上可以出現重複的,但是實際開發不能出現的)。裡面可以出現特殊字元。
- Spring和Struts1框架整合的時候
- <bean name=”/user” class=””/>
Bean的生命週期的配置(瞭解)
- init-method :Bean被初始化的時候執行的方法
- destroy-method :Bean被銷燬的時候執行的方法(Bean是單例建立,工廠關閉)
Bean的作用範圍的配置(重點)
- scope :Bean的作用範圍
- singleton :預設的,Spring會採用單例模式建立這個物件。
- prototype :多例模式。(Struts2和Spring整合一定會用到)
- request :應用在web專案中,Spring建立這個類以後,將這個類存入到request範圍中。
- session :應用在web專案中,Spring建立這個類以後,將這個類存入到session範圍中。
- globalsession :應用在web專案中,必須在porlet環境下使用。但是如果沒有這種環境,相對於session。
1.4 Spring的Bean管理(XML方式)
1.4.1 Spring的Bean的例項化方式(瞭解)
Bean已經都交給Spring管理,Spring建立這些類的時候,有幾種方式:
無參構造方法的方式(預設)
編寫類
編寫配置
靜態工廠例項化的方式
編寫Bean2的靜態工廠
配置
例項工廠例項化的方式
Bean3的例項工廠
配置
1.4.2 Spring的屬性注入(重點)
1.構造方法的方式的屬性注入
1.構造方法的屬性注入
2.Set方法的方式的屬性注入
Set方法的屬性注入
Set方法設定物件型別的屬性
3.P名稱空間的屬性注入(Spring2.5以後)
通過引入p名稱空間完成屬性的注入:
- 寫法:
- 普通屬性 p:屬性名=”值”
- 物件屬性 p:屬性名-ref=”值”
- P名稱空間的引入
- 使用p名稱空間
4.SpEL的屬性注入(Spring3.0以後)
- SpEL:Spring Expression Language,Spring的表示式語言。
- 語法:
- #{SpEL}
- 語法:
5.集合型別屬性注入(瞭解)
配置
<!-- Spring的集合屬性的注入============================ -->
<!-- 注入陣列型別 -->
<bean id="collectionBean" class="com.itheima.spring.demo5.CollectionBean">
<!-- 陣列型別 -->
<property name="arrs">
<list>
<value>王東</value>
<value>趙洪</value>
<value>李冠希</value>
</list>
</property>
<!-- 注入list集合 -->
<property name="list">
<list>
<value>李兵</value>
<value>趙如何</value>
<value>鄧鳳</value>
</list>
</property>
<!-- 注入set集合 -->
<property name="set">
<set>
<value>aaa</value>
<value>bbb</value>
<value>ccc</value>
</set>
</property>
<!-- 注入Map集合 -->
<property name="map">
<map>
<entry key="aaa" value="111"/>
<entry key="bbb" value="222"/>
<entry key="ccc" value="333"/>
</map>
</property>
</bean>
1.5 Spring分模組開發
在載入配置檔案的時候載入多個:
ApplicationContxt applicationContext=new ClassPathXmlApplicationContext(“applicationContext.xml”,”applicationContext2.xml”);
在一個配置檔案中引入多個配置檔案:
謝謝閱讀! -----知飛翀