前面1-9同系列的博文介紹了一些基本知識,是後面文章的基礎。
後面所有的文章都只是記錄一些使用方法和要點,依賴和pom的配置後面會有文章專門整理一下全面的配置。
入門
1. 什麼是IOC的功能?
* IoC -- Inverse of Control,控制反轉,將對象的創建權反轉給Spring!!
* 使用IOC可以解決的程序耦合性高的問題!!
2.包結構和類
* com.demo1
* UserService -- 接口
* UserServiceImpl -- 具體的實現類
3. 想把UserServiceImpl實現類的創建交給Spring框架來管理,需要創建Spring框架的配置文件,完成配置
* 在src目錄下創建applicationContext.xml的配置文件,名稱是可以任意的,但是一般都會使用默認名稱!!
* 引入spring的約束,需要先找到具體的約束頭信息!!
* spring-framework-3.2.0.RELEASE\docs\spring-framework-reference\html\xsd-config.html
* 具體的約束如下:
<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.xsd">
<bean id="userService" class="com.itcast.demo1.UserServiceImpl"/>
</beans>
4. 編寫測試程序,採用Spring框架的工廠方式來獲取到UserService接口的具體實現類!!
public void demo2(){
// 使用Spring的工廠:
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
// 通過工廠獲得類:
UserService userService = (UserService) applicationContext.getBean("userService");
userService.sayHello();
}
實際使用Spring開發web項目時不會這麼使用。但是如果是開發可運行jar包時,使用Spring就會使用這種方式。
Spring bean標籤配置文件
1. id屬性和name屬性的區別
* id -- Bean起個名字,在約束中採用ID的約束,唯一
* 取值要求:必須以字母開始,可以使用字母、數字、連字符、下劃線、句話、冒號 id:不能出現特殊字符
* name -- Bean起個名字,沒有采用ID的約束(不常用)
* 取值要求:name:出現特殊字符.如果<bean>沒有id的話 , name可以當做id使用
* Spring框架在整合Struts1的框架的時候,Struts1的框架的訪問路徑是以/開頭的,例如:/bookAction
2. class屬性 -- Bean對象的全路徑
3. scope屬性 -- scope屬性代表Bean的作用範圍
* singleton -- 單例(默認值)
* prototype -- 多例,在Spring框架整合Struts2框架的時候,Action類也需要交給Spring做管理,配置把Action類配置成多例!!
* request -- 應用在Web項目中,每次HTTP請求都會創建一個新的Bean
* session -- 應用在Web項目中,同一個HTTP Session 共享一個Bean
* globalsession -- 應用在Web項目中,多服務器間的session
4. Bean對象的創建和銷燬的兩個屬性配置(瞭解)
* 說明:Spring初始化bean或銷燬bean時,有時需要作一些處理工作,因此spring可以在創建和拆卸bean的時候調用bean的兩個生命週期方法
* init-method -- 當bean被載入到容器的時候調用init-method屬性指定的方法
* destroy-method -- 當bean從容器中刪除的時候調用destroy-method屬性指定的方法
* 想查看destroy-method的效果,有如下條件
* scope= singleton有效
* web容器中會自動調用,但是main函數或測試用例需要手動調用(需要使用ClassPathXmlApplicationContext的close()方法)