#spring——bean的配置及作用域#
1.bean的常用配置項:(理論上隻有class是必須的)
id:唯一辨別
class:具體是哪一個類
scope:範圍
constructor arguments:構造器的參數
properties:屬性
Autowiring mode:自動裝配模式
lazy-initialization mode:懶加載模式
initialization/destruction method:初始化/銷毀的方法
2.bean的作用域
singletion 單例 bean容器隻有唯一的對象(預設模式)------對于一個IOC容器,隻建立一個執行個體
prototype 每次請求會建立新的執行個體,destory方式不生效------對于不同的請求,建立不同的執行個體
request 對于request建立新的執行個體,隻在目前request内有效-----對于一個request,建立一個執行個體
session 對于session建立新的執行個體,隻在目前session内有效------對于一個session,建立一個執行個體
global session 基于portlet(例如單點登入的範圍)的web中有效,如果在web中同session------對于一個全局的session,建立一個執行個體(不同系統之間的切換)
#spring——bean的生命周期#
生命周期:定義,初始化,使用,銷毀
一.初始化:
方法1.實作org.springframework.beans.foctory.InitializingBean接口,覆寫afterPropertiesSet方法。系統會自動查找afterPropertiesSet方法,執行其中的初始化操作
方法2.配置init-method
例如設定bean中init-method="init"那麼在初始化過程中就會調用相應class指定類的init()方法進行初始化工作
二 銷毀(與初始化類似)
方法1.實作org.springframework.beans.foctory.DisposableBean接口,覆寫destory方法。
方法2.配置destory-method
三 配置全局初始化、銷毀方法(屬于預設配置,參考截圖)
注意:
當三種方式同時使用時,全局(預設的)初始化銷毀方法會被覆寫。
另外實作接口的初始化/銷毀方式會先于配置檔案中的初始化/銷毀方式執行。
若僅有全局初始化即使沒有以上三種初始化方法也是可以編譯執行的,但是有另兩種初始化銷毀方法時,必須存在相應的方法,否者編譯報錯
#spring——Aware接口#
作用:實作了Aware接口的bean在初始化後可以擷取相應資源并進行相應的操作(對于操作的結果要慎重!)
舉例:
ApplicationContextAware:向實作了該接口的bean提供IOC容器的上下文資訊(ApplicationContext),實作了該接口的bean必須配置到配置檔案中并由spring的bean容器加載
BeanNameAware:向實作了該接口的bean提供關于beanName定義的相關内容
1.ApplicationContextAware
1.1 接口方法:setApplicationContext
1.2 作用:通常用來擷取上下文對象,聲明全局變量後在方法中對變量進行初始化并供其他方法調用
1.3 實作過程:建立一個類并實作ApplicationContextAware接口,重寫接口方法public void setApplicationContext(ApplicationContext applicationContext);在xml檔案中配置該類;當spring加載該配置檔案時即調用接口方法
2.BeanNameAware
2.1 接口方法:setBeanName
2.2 作用:擷取聲明的類名,聲明全局變量後在方法中對變量進行初始化并供其他方法調用
2.3 實作過程:建立一個類并實作BeanNameAware接口,重寫接口方法public void setBeanName(String name);在xml檔案中配置該類;當spring加載該配置檔案時即調用接口方法
Bean的自動裝配(Autowiring)
1.No:不做任何操作
2.byname:根據屬性名自動裝配。此選項将檢查容器并根據名字查找與屬性完全一緻的bean,并将其與屬性自動裝配
3.byType:如果容器中存在一個與指定屬性類型相同的bean,那麼将與該屬性自動裝配;如果存在多個該類型的bean,那麼抛出異常,并指出不能使用byType方式進行自動裝配;如果沒有找到相比對的bean,則什麼事都不發生
4.Constructor:與byType方式類似,不同之處在于它應用于構造器參數。如果容器中沒有找到與構造器參數類型一緻的bean,那麼抛出異常
Bean的自動裝配:在beans标簽配置屬性 default-autowire="no/byName/byType/constructor"
作用為:省去了在Spring的xml中配置property标簽和constructor-arg标簽,隻需要配置bean标簽即可
PS:byName和byType為設值注入,constructor為構造注入;
byName要求bean标簽的id屬性需要和成員變量的名稱一緻,
byType和constructor則跟id無關
Resources (針對于資源檔案的統一接口)
A、UrlResource:URL 對應的資源,根據一個 URL 位址即可擷取
B、ClassPathResource:擷取類路徑下的資源
C、FileSystemResource:擷取檔案系統裡面的資源
D、ServletContextResource:ServletContext 封裝的資源,用于通路 ServletContext 環境下的資源
E、InputStreamResource:擷取輸入流封裝的資源
F、ByteArrayResource:擷取位元組數組封裝的資源
通過實作 ApplicationContextAware 接口中的方法
setApplicationContext(ApplicationContext applicationContext)
Resource resource = applicationContext.getResource("xxx");
classpath:config.txt
file:C:\\config.txt
ftp:C:\\config.txt
http://www.baidu.com/more/