日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

spring实战三装配bean之Bean的作用域以及初始化和销毁Bean

發布時間:2024/1/3 42 生活家
生活随笔 收集整理的這篇文章主要介紹了 spring实战三装配bean之Bean的作用域以及初始化和销毁Bean 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.Bean的作用域

所有的spring bean默認都是單例。當容器分配一個Bean時,不論是通過裝配還是調用容器的getBean()方法,它總是返回Bean的同一個實例。有時候需要每次請求時都獲得唯一的Bean實例,那么就需要覆蓋Spring默認的單例配置。當在Spring中配置<bean>元素時,可以為bean聲明一個作用域。為了讓spring在每次請求時都為bean產生一個新的實例,只需要配置bean的scope屬性為prototype即可。如下所示:

<bean id="ticket"
class="com.springinaction.springidol.Ticket" scope="prototype" />

通過將scope屬性設置為prototype,就可以保證每一個裝配了Ticket Bean的人都將獲得不同的實例。

除了prototype,spring還提供了其他幾個作用域選項,如下表所示:

大多數情況下,只需要選擇默認的singleton 作用域即可,但是如果使用Spring 作為工廠來創建領域對象新實例時,prototype 作用域就非常有用。如果領域對象的作用域配置為prototype,我們在Spring 中可以很容易地配置它們,就像配置其他Bean 一樣。Spring 保證每次請求一個prototype Bean 時總是返回一個獨一無二的實例。

細心的讀者會發現Spring 有關單例的概念限于Spring 上下文的范圍內。不像真正的單例,在每個類加載器中保證只有一個實例。Spring 的單例Bean 只能保證在每個應用上下文中只有一個Bean 的實例。沒有人可以阻止你使用傳統的方式實例化同一個Bean,或者你甚至可以定義幾個<bean> 聲明來實例化同一個Bean。

2.初始化和銷毀Bean

當實例化一個Bean 時,可能需要執行一些初始化操作來確保該Bean 處于可用狀態。同樣地,當不再需要Bean,將其從容器中移除時,我們可能還需要按順序執行一些清除工作。為了滿足初始化和銷毀Bean 的需求,Spring 提供了Bean 生命周期的鉤子方法。

2.1 init-method 和destroy-method:

為Bean 定義初始化和銷毀操作, 只需要使用init-method 和destroy-method參數來配置<bean> 元素。init-method 屬性指定了在初始化Bean 時要調用的方法。類似地,destory-method 屬性指定了Bean 從容器移除之前要調用的方法。如下所示:

<bean id="auditorium"
class="com.springinaction.springidol.Auditorium"
init-method="turnOnLights"
destroy-method="turnOffLights"/>

當我們使用這種方式配置時,auditorium Bean 實例化后會立即調用turnOn-Lights() 方法,讓它有機會點亮表演場地。在該Bean 從容器移除和銷毀前,會調用turnOffLights() 方法將燈關閉。

2.2 InitializingBean 和DisposableBean:

為Bean 定義初始化和銷毀方法的另一種可選方式是,讓Bean 實現Spring 的InitializingBean和DisposableBean 接口。Spring 容器以特殊的方式對待實現這兩個接口的Bean,允許它們進入Bean 的生命周期。InitializingBean 聲明了一個afterPropertiesSet()方法作為初始化方法。而DisposableBean 聲明了一個destroy()方法,該方法在Bean 從應用上下文移除時會被調用。使用這些生命周期接口的最大好處就是Spring 能夠自動檢測實現了這些接口的Bean,而無需額外的配置。實現這些接口的缺點是Bean 與Spring 的API 產生了耦合。就因為這條理由,所以還是推薦使用init-method 和destory-method 屬性來初始化和銷毀Bean。唯一可能使用Spring 的生命周期接口的場景是,開發一個明確在Spring 容器內使用的框架Bean。

2.3 默認的init-method 和destory-method:

如果在上下文中定義的很多Bean 都擁有相同名字的初始化方法和銷毀方法,你沒必要為每一個Bean 聲明init-method 和destory-method 屬性。幸運的是,你可以使用<beans> 元素的default-init-method 和default-destorymethod屬性:

<?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-3.0.xsd"
default-init-method="turnOnLights"
default-destroy-method="turnOffLights"> ...
</beans>

default-init-method 屬性為應用上下文中所有的Bean 設置了共同的初始化方法。類似的是,default-destory-method 為應用上下文中所有的Bean 設置了一個共同的銷毀方法。在本示例中,我們可以要求Spring 在初始化應用上下文中的Bean 時調用turnOnLights(),在銷毀Bean 時調用turnOffLights()(如果這些方法存在的話,否則什么都不會發生)。

總結

以上是生活随笔為你收集整理的spring实战三装配bean之Bean的作用域以及初始化和销毁Bean的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。