最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring Bean的Scope作用域詳解

 更新時間:2025年01月06日 09:59:06   作者:catoop  
本文介紹了Spring框架中的BeanScope(作用域),包括Singleton(單例)和Prototype(原型)兩種常見作用域的定義、生命周期和適用場景

Spring Bean的Scope作用域

Spring框架中的Bean Scope(作用域)用于控制Bean的生命周期和可見性。

Spring提供了多種作用域,每種作用域決定了Bean在應(yīng)用中的創(chuàng)建和管理方式。

以下是Spring中最常用的作用域及其特點:

Scope作用域類型

1. Singleton(單例)

  • 默認作用域: 如果沒有顯式指定作用域,默認就是Singleton。
  • 生命周期: 在整個應(yīng)用中,只有一個實例。這個實例在Spring容器啟動時創(chuàng)建,并且在整個應(yīng)用運行期間一直存在。
  • 適用場景: 適用于無狀態(tài)的Bean,如服務(wù)層和DAO層的Bean。
 @Component
 @Scope(ConfigurableBeanFactory.SCOPE_SINGLETON)
 public class MySingletonComponent {
     // ...
 }

2. Prototype(原型)

  • 生命周期: 每次請求都會創(chuàng)建一個新的實例。Spring容器在創(chuàng)建原型Bean后,就不再管理其生命周期。
  • 適用場景: 適用于有狀態(tài)的Bean,如需要每個請求都獨立處理的Bean。
 @Component
 @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
 public class MyPrototypeComponent {
     // ...
 }

在Spring框架中,使用@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)修飾的@Component表示該組件是一個原型(Prototype)作用域的bean。

這意味著每次通過Spring容器請求這個bean時,都會創(chuàng)建一個新的實例。

與單例(Singleton)作用域的bean不同,原型作用域的bean不會被緩存,每次請求都會返回一個新的實例。

生命周期

每次請求都創(chuàng)建新實例

  • 每次調(diào)用context.getBean(MyPrototypeComponent.class)時,都會創(chuàng)建一個新的MyPrototypeComponent實例。
  • 這意味著每個請求之間是隔離的,每個實例都有獨立的狀態(tài)。

生命周期管理

  • 原型作用域的bean的生命周期由創(chuàng)建它的客戶端代碼負責(zé)管理。Spring容器只負責(zé)初始化和裝配bean,一旦bean被創(chuàng)建并返回給客戶端代碼,容器就不再管理其生命周期。
  • 容器不會調(diào)用銷毀方法(如@PreDestroy注解的方法)來清理資源,因為容器不知道何時應(yīng)該銷毀這些bean,這也反向說明了原型Bean被Spring創(chuàng)建后就不在管理其生命周期了。

在Spring框架中,當(dāng)一個Bean的作用域被設(shè)置為SCOPE_PROTOTYPE時,這個Bean在容器啟動時不會被自動實例化。相反,每次通過Spring容器請求這個Bean時,才會創(chuàng)建一個新的實例。

關(guān)鍵總結(jié)

Singleton作用域

  • 默認作用域。
  • 在容器啟動時被實例化一次。
  • 整個應(yīng)用生命周期內(nèi)只存在一個實例。

Prototype作用域

  • 每次請求時都會創(chuàng)建一個新的實例(也是每次請時才會創(chuàng)建,一個被定義為該作用域的類如果沒有在任何地方使用它,那么你可以認為它和一個普通的Java類沒有區(qū)別)。
  • 請求的方式包括注入該Bean到其他Bean里,每注入一個地方都是一個獨立的Bean?;蛘呤褂?context.getBean 方式獲取Bean的時候。
  • 容器啟動時不會自動實例化。
  • 容器在創(chuàng)建Bean后不再管理其生命周期。
  • 特別適合那種需要注入Spring中其他類的Java類,但是這個類又是在某些場景需要的時候才需要實例化的場景,例如實現(xiàn) Runnable 接口的線程任務(wù)類。

示例:

@Data
@Accessors(chain = true)
@Component
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
public class Task implements Runnable {

    private TaskInfo taskInfo;

    // 注入對象
    @Autowired
    private TaskService taskService;

    @Override
    public void run() {
        taskService.process(taskInfo);
    }
}
// 調(diào)用示例代碼
ApplicationContext context = xxx;
ExecutorService executor = xxx;
TaskInfo taskInfo = xxx;
// 這里每次getBean獲取的Task對象都是一個新的實例
Task task = context.getBean(Task.class).setTaskInfo(taskInfo);
executor.execute(task);

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • java 字浮串提取方法匯集

    java 字浮串提取方法匯集

    用方法toCharArray public char[] toCharArray()
    2008-10-10
  • @Async導(dǎo)致controller?404及失效原因解決分析

    @Async導(dǎo)致controller?404及失效原因解決分析

    這篇文章主要為大家介紹了@Async導(dǎo)致controller?404失效問題解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-07-07
  • Java日期與時間類原理解析

    Java日期與時間類原理解析

    這篇文章主要介紹了Java日期與時間類原理解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-01-01
  • 最新評論

    泗阳县| 荃湾区| 温州市| 沽源县| 项城市| 凉山| 霍邱县| 墨玉县| 无为县| 高要市| 天祝| 卢湾区| 泗阳县| 将乐县| 从化市| 荣昌县| 湛江市| 花垣县| 蕲春县| 沂水县| 岱山县| 济宁市| 福州市| 汶上县| 都昌县| 抚州市| 罗城| 察隅县| 若羌县| 织金县| 汝南县| 怀宁县| 佛教| 汶川县| 五大连池市| 田林县| 通州市| 泊头市| 神农架林区| 获嘉县| 和政县|