15 Spring Bean裝配
阿新 • • 發佈:2018-11-12
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 介面
- Spring 中提供了一些以Aware 結尾的介面,實現了Aware介面的bean在被初始化之後,可以獲取響應資源;
- 通過Aware介面,可以對Spring響應資源進行操作(一定要慎重)
- 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 方法。 |