1. 程式人生 > >15 Spring Bean裝配

15 Spring Bean裝配

Spring Bean

1. Bean配置

Bean常見配置

屬性 屬性說明 是否是必須
id 在Spring 容器生命週期內唯一的標識 N
class 具體是要spring 容器管理的那個類 Y
scope Bean 的作用域 N
constructor arguments 構造器引數 N
properties 屬性 N
Autowiring mode 自動裝配的模式 N
laz-initialization mode 懶載入模式 N
initalization/destruction methode 初始化和銷燬的方法 N

注意 如果是通過ID獲取Bean,ID屬性是必須的。如果是通過型別ID可以省略

2. Bean作用域

作用域 說明
singleton 單利模式,指一個Bean容器中只有一份例項(預設作用域)
prototype 每次請求(每次使用)建立新的例項,destroy 方式不生效
request 每次http請求建立一個例項且僅在當前request內有效
session 每次http請求建立一個例項,在當前session內有效
global session 基於portlet的web中有效(portlet 定義了global session)如果是在web中,同session
<bean id="" class="" scope="">
</bean>

3. Bean生命週期

Bean 的生命週期分為四部分

  • 定義
  • 初始化
  • 使用
  • 銷燬
3.1 Bean初始化

Bean 初始化有兩種方式,一種實現(org.springframework.beans.factory.InitializingBean)介面,重寫afterPropertiesSet方法。另外一種配置initmethode屬性

實現 InitializingBean 介面


public class ExampleInitializingBean implements InitializingBean{
    
    @Override
    public void afterPropertiesSex() throws Exception{
        // init 
    }
}

配置init-method 屬性

配置檔案

<bean id="exampleInitBean" class="examples.ExampleBean" init-method="init">
    
</bean>

Java

public class ExampleBean{
    public void init(){
        // init 
    }
}
3.2 Bean 銷燬

Bean 的銷燬同樣有兩種方法;一種實現(org.springframework.beans.factory.DisposableBean)介面,重寫destroy方法。另外一種 配置destroy-method屬性。

DisposableBean 介面

public class ExampleDisposableBean implements DisposableBean{
    
    @Override
    public void destroy() throws Exception{
        
    }
}

配置destroy 屬性

配置檔案

<bean id="exampleInitBean" class="examples.ExampleBean" destroy-method="cleanup">
    
</bean>

Java類

public class ExampleBean{
    
    public void cleanup(){
           
    }
}

3.3 配置全域性的初始化和銷燬的方法

Spring 配置Bean全域性的初始化和銷燬方法在配置檔案的名稱空間處配置

<?xml version="1.0" encoding="UTF-8"?>
<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" 
						default-init-method="defaultInit" default-destroy-method="defaultDestroy">

</beans>

注意 當三個同時使用的時候執行順序:實現介面的要優先於bean中配置的。全域性的無效;

4. Bean 裝配之Aware 介面

  1. Spring 中提供了一些以Aware 結尾的介面,實現了Aware介面的bean在被初始化之後,可以獲取響應資源;
  2. 通過Aware介面,可以對Spring響應資源進行操作(一定要慎重)
  3. Aware 介面為對Spring 進行簡單的擴充套件提供了方便的入口

範例 實現ApplicationAware 介面獲取當前IOC容器中的Bean物件


5. Bean自動裝配

Bean 在沒有設定自動注入前需要在Bean中通過 property 元素的 ref 屬性手動注入。當我們選擇自動裝配後就無需設定property屬性。

Spring Bean 自動裝配有如下型別:

型別 說明
no 不做任何操作(預設方式)
byName 根據屬性名自動裝配。此選項將檢查容器並根據名字查詢與屬性完全一致的Bean,
並將其與屬性自動裝配。
byType 如果容器中存在一個與指定屬性型別相同的Bean,那麼將與該屬性自動裝配;
如果存在多個改型別Bean,那麼跑出異常,並指出不能使用byType方式進行自動裝配;
如果沒有找到相應的Bean則什麼事都不發生。
constructor 與byType 方式類似,不同之處在於它應用於構造引數。
如果容器中沒有找到與構造器引數型別一致的Bean,那麼丟擲異常

自動裝配設定

<?xml version="1.0" encoding="UTF-8"?>
<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" default-autowire="byName">
</beans>

6. Bean 註解

從 Spring 2.5 開始就可以使用註解來配置依賴注入。而不是採用 XML 來描述一個 bean 連線,你可以使用相關類,方法或欄位宣告的註解,將 bean 配置移動到元件類本身。

<context:component-scan/> 掃描指定的包中的類上的註解
<context:annotation-config />
<context:component-scan/> 註解就已經包含 <context:annotation-config /> 註解,所以一般只寫包掃描路徑即可

常見註解

編號 註解 註解說明
1 @Controller 宣告Action元件
2 @Service 宣告Service元件 @Service(“myMovieLister”)
3 @Repository 宣告Dao元件
4 @Component 泛指元件, 當不好歸類時.
5 @Resource 用於注入,( j2ee提供的 )預設按名稱裝配,@Resource(name=“beanName”)
6 @Autowired 用於注入,(Spring提供的) 預設按型別裝配
7 @Transactional( rollbackFor={Exception.class}) 事務管理
8 @Scope(“prototype”) 設定bean的作用域
9 @Qualifier 通過指定確切的將被連線的 bean,@Autowired 和 @Qualifier 註解可以用來刪除混亂。
10 @Required @Required 註解應用於 bean 屬性的 setter 方法。