精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Spring如何管理Bean的生命周期呢?

開發 前端
對于非單例 Bean(如 prototype 作用域的 Bean),它們會在每次請求時創建,并在不再需要時由 Java 的垃圾回收機制銷毀。

我們都知道,在面試的過程中,關于 Spring 的面試題,那是各種各樣,很多時候就會問到關于 Spring的相關問題,比如 AOP ,IOC 等等,還有就是關于 Spring 是如何管理 Bean 的生命周期的相關問題,今天了不起就來和大家一起看看 Spring 是如何管理 Bean 的生命周期的。

源碼分析

BeanFactory

其實我們對于這個 Spring 管理 Bean 的生命周期有時候并不需要我們去大篇幅的去背誦某塊的內容,我們需要的就是學會看源代碼,比如源代碼中的注釋部分,當我們看到這注釋部分的時候,很大程度上能夠幫助我們理解源碼的含義。

BeanFactory是Spring框架中的一個接口,它是一個工廠類,用來創建和管理Spring中的Bean對象。

我們看源碼中的注釋

* <p>Bean factory implementations should support the standard bean lifecycle interfaces
 * as far as possible. The full set of initialization methods and their standard order is:

這句話直接翻譯就是 Bean Factory 實現類應該盡可能的支持標準的生命周期接口。注釋的下半段內容,就是描述的 Bean 生命周期的相關內容了。所以源碼里面的注釋需要我們及時的去看一下,雖然都是純英文的,但是能讀出個大概得內容,再去看源碼的話,至少知道它是干嘛的方法。

Bean 的生命周期

我們在了解他如何管理的時候,我們得先知道這個 Bean 的生命周期都有哪幾個階段,知道了階段,我們再來看它的實現。

我們先總結:

Bean 的生命周期可以總結為如下的幾個階段,

1. Bean的實例化階段

2. Bean的設置屬性階段

3. Bean的 初始化階段

4. Bean的銷毀階段

也有些人會細分實例化階段,就是把實例化拆分成兩部分,第一部分是注冊階段,第二部分是實例化階段,其實區別不大。

Bean實例化階段

在Spring框架中,Bean的實例化是一個核心過程,它涉及了多個步驟以確保Bean能夠正確地被創建并注入到應用上下文中。

Bean定義注冊:

  • 首先,你需要在Spring的配置文件(如XML配置文件或Java配置類)中定義Bean。這包括指定Bean的類名、作用域、初始化方法、銷毀方法以及可能的依賴關系等。
  • Spring容器會讀取這些配置,并將Bean定義信息存儲在其內部的數據結構中,通常是BeanDefinition對象。

實例化前的準備:

  • 在實例化Bean之前,Spring會進行一些準備工作,如解析Bean定義中的屬性、檢查依賴關系等。
  • 如果Bean定義中引用了其他Bean,Spring會嘗試先解析并實例化這些依賴Bean。

實例化:

  • 實例化是創建Bean對象的過程。Spring提供了多種實例化Bean的方式:

構造器實例化:通過調用Bean的構造方法來創建實例。你可以在配置文件中指定要使用的構造方法,并提供相應的參數。

靜態工廠方法實例化:通過調用靜態工廠方法來創建Bean實例。你需要在配置文件中指定工廠類的類名和工廠方法的名稱。

實例工廠方法實例化:首先實例化一個工廠Bean,然后調用該工廠Bean的某個非靜態方法來創建目標Bean實例。

默認構造器實例化:如果Bean定義中沒有指定其他實例化方式,并且Bean類有一個無參構造器,那么Spring將使用默認構造器來實例化Bean。

  • 實例化完成后,你得到的是一個原始的對象,它還沒有進行任何屬性注入或初始化。

屬性注入:

  • 在Bean實例化之后,Spring會進行屬性注入(也稱為依賴注入)。這包括將Bean定義中指定的屬性值或對其他Bean的引用注入到Bean的相應屬性中。
  • Spring支持多種屬性注入方式,如基于字段的注入、基于setter方法的注入和基于構造器的注入等。

BeanPostProcessor處理:

在Bean的屬性注入完成后,但Bean的初始化方法執行之前,Spring會調用已注冊的BeanPostProcessor接口的postProcessBeforeInitialization方法。這是一個可選的步驟,你可以通過實現該接口并注冊相應的BeanPostProcessor來在Bean初始化前后執行自定義的邏輯。

初始化:

  • 接下來,Spring會調用Bean定義中指定的初始化方法(如果有的話)。這通常是在Bean類中定義的某個方法,并用特定的注解(如@PostConstruct)或XML配置中的元素的init-method屬性來指定。
  • 初始化方法是Bean在準備好接受請求之前進行必要設置或執行特定任務的地方。

BeanPostProcessor再處理:

在Bean初始化方法執行之后,Spring會再次調用已注冊的BeanPostProcessor接口的postProcessAfterInitialization方法。這是另一個可選的步驟,你可以在這里執行一些清理或后處理操作。

Bean就緒:

經過上述步驟后,Bean就已經被完全創建并初始化了。現在它可以被應用上下文中的其他組件使用或注入到其他Bean中。

到這里,我們的實例化就說完了,記下來看第二階段。

Bean的設置屬性階段

Bean的設置屬性階段(也稱為屬性注入或依賴注入)是Bean生命周期中的一個重要環節。這個階段發生在Spring容器創建Bean的實例之后,但在Bean被實際使用之前。

  • 當Spring容器創建一個Bean的實例后,它會檢查該Bean是否有需要注入的屬性。這些屬性可能是其他的Bean、基本數據類型、集合、Map等。
  • Spring會查找與這些屬性對應的配置信息(可能是XML中的標簽、注解中的值或其他配置方式),并將它們注入到Bean的相應字段或setter方法中。

注入方式:

  • 字段注入:通過直接在字段上使用@Autowired或其他相關注解來實現。但請注意,字段注入在某些情況下可能導致測試困難或難以遵循良好的封裝原則。
  • 構造函數注入:在構造函數參數上使用@Autowired或其他相關注解。這是推薦的方式之一,因為它確保了Bean在創建時就已經擁有所有必需的依賴項,并且這些依賴項是不可變的。
  • setter方法注入:在setter方法上使用@Autowired或其他相關注解。這種方式允許Bean在創建后的某個時間點接收其依賴項。

既然我們已經把這個屬性設置完畢了,那么就要開始后進行初始化階段了。

Bean 的初始化

  • Bean Aware接口回調
  • Bean初始化前操作
  • Bean初始化操作
  • Bean初始化后操作
  • Bean初始化完成操作

BeanAware接口回調

private void invokeAwareMethods(final String beanName, final Object bean) {
  if (bean instanceof Aware) {
   if (bean instanceof BeanNameAware) {
    ((BeanNameAware) bean).setBeanName(beanName);
   }
   if (bean instanceof BeanClassLoaderAware) {
    ((BeanClassLoaderAware) bean).setBeanClassLoader(getBeanClassLoader());
   }
   if (bean instanceof BeanFactoryAware) {
    ((BeanFactoryAware) bean).setBeanFactory(AbstractAutowireCapableBeanFactory.this);
   }
  }
 }

Bean初始化前操作

@Override
public Object applyBeanPostProcessorsBeforeInitialization(Object existingBean, String beanName)
  throws BeansException {

 Object result = existingBean;
 for (BeanPostProcessor beanProcessor : getBeanPostProcessors()) {
  result = beanProcessor.postProcessBeforeInitialization(result, beanName);
  if (result == null) {
   return result;
  }
 }
 return result;
}

Bean初始化操作

調用InitializingBean接口的afterPropertiesSet方法 調用定義bean的時候指定的初始化方法。

public interface InitializingBean {

 /**
  * Invoked by the containing {@code BeanFactory} after it has set all bean properties
  * and satisfied {@link BeanFactoryAware}, {@code ApplicationContextAware} etc.
  * <p>This method allows the bean instance to perform validation of its overall
  * configuration and final initialization when all bean properties have been set.
  * @throws Exception in the event of misconfiguration (such as failure to set an
  * essential property) or if initialization fails for any other reason
  */
 void afterPropertiesSet() throws Exception;

}

Bean初始化后階段

public Object applyBeanPostProcessorsAfterInitialization(Object existingBean, String beanName)
   throws BeansException {

  Object result = existingBean;
  for (BeanPostProcessor processor : getBeanPostProcessors()) {
   Object current = processor.postProcessAfterInitialization(result, beanName);
   if (current == null) {
    return result;
   }
   result = current;
  }
  return result;
 }

Bean初始化完成操作

public interface SmartInitializingSingleton {

 /**
  * Invoked right at the end of the singleton pre-instantiation phase,
  * with a guarantee that all regular singleton beans have been created
  * already. {@link ListableBeanFactory#getBeansOfType} calls within
  * this method won't trigger accidental side effects during bootstrap.
  * <p><b>NOTE:</b> This callback won't be triggered for singleton beans
  * lazily initialized on demand after {@link BeanFactory} bootstrap,
  * and not for any other bean scope either. Carefully use it for beans
  * with the intended bootstrap semantics only.
  */
 void afterSingletonsInstantiated();

}

當我們完成了初始化之后,使用完成,最后 Bean 就要走到銷毀階段了。

Bean 的銷毀

@Override
 public void destroyBean(Object existingBean) {
  new DisposableBeanAdapter(
    existingBean, getBeanPostProcessorCache().destructionAware, getAccessControlContext()).destroy();
 }

這里需要注意的是

  • 當容器關閉時,或者當單例 Bean 的作用域結束時,Spring 會銷毀 Bean 的實例。
  • 對于非單例 Bean(如 prototype 作用域的 Bean),它們會在每次請求時創建,并在不再需要時由 Java 的垃圾回收機制銷毀。

你知道 Spring是如何管理 Bean 的生命周期了么?

責任編輯:武曉燕 來源: Java極客技術
相關推薦

2022-10-19 23:28:55

Spring生命周期Bean

2023-12-28 09:59:37

Spring容器XML

2022-03-14 08:54:42

SpringBean生命周期

2021-12-08 11:18:21

Spring Bean面試題生命周期

2020-02-10 19:34:12

生命周期流程流程圖

2012-06-20 10:29:16

敏捷開發

2021-07-19 05:52:29

網絡生命周期網絡框架

2022-09-05 07:06:59

BeanSpring

2022-06-01 09:25:16

嵌套生命周期智能技術工業資產

2015-07-08 16:28:23

weak生命周期

2011-04-19 09:27:25

Spring

2022-04-19 07:20:24

軟件開發安全生命周期SSDLC應用安全

2025-11-17 07:45:45

SpringBean接口

2020-06-10 07:38:30

Spring框架周期

2009-05-21 09:12:41

Java開發平臺生命周期管理

2020-12-11 08:04:22

SpringAOPBean

2024-03-14 10:47:12

Spring生命周期阿里

2010-05-17 22:06:41

數據安全電子文檔鼎普科技

2012-12-04 10:02:03

2020-03-13 07:33:28

物聯網生命周期管理IOT
點贊
收藏

51CTO技術棧公眾號

日本一区影院| 日本片在线看| 国产呦精品一区二区三区网站| 操日韩av在线电影| 国产二级一片内射视频播放| 校园春色亚洲色图| 亚洲少妇中出一区| 欧美一区二区三区四区在线观看地址| 国产精品久久久久久久免费| 亚洲成人在线| 日韩中文在线不卡| 国产伦精品一区三区精东| 粉嫩91精品久久久久久久99蜜桃| 亚洲一区自拍偷拍| 亚洲精品成人a8198a| 你懂的网站在线| 久久成人免费电影| 欧美一级淫片播放口| 亚洲国产123| 女人av一区| 精品国产乱码久久久久久图片| 国产视频在线视频| 国产盗摄在线视频网站| 国产精品传媒视频| 日产精品久久久一区二区| 精品国产av 无码一区二区三区| 首页欧美精品中文字幕| 久久久久久久999精品视频| 精品伦精品一区二区三区视频密桃| 国产精品对白久久久久粗| 777a∨成人精品桃花网| 日本中文字幕高清| 免费观看一级欧美片| 一个色妞综合视频在线观看| 中日韩在线视频| 国产福利在线| 久久久久久久av麻豆果冻| 风间由美一区二区三区| 国产免费视频一区二区三区| 日本中文字幕一区二区有限公司| 欧美在线视频免费观看| 国产对白videos麻豆高潮| 亚洲欧美综合国产精品一区| 自拍偷拍亚洲区| 免费看的黄色录像| 日韩中文在线电影| 日韩午夜在线视频| 欧美日韩国产一二三区| 精品国产aⅴ| 亚洲视频axxx| 国产激情在线免费观看| 在线观看欧美理论a影院| 日韩精品久久久久久福利| 一区二区免费在线观看视频| 好吊妞国产欧美日韩免费观看网站 | 欧美日韩久久久| 午夜激情在线观看视频| 色8久久影院午夜场| 色菇凉天天综合网| 日本免费观看网站| 国产一区二区三区四区五区3d| 欧美丝袜丝交足nylons| av亚洲天堂网| 亚洲午夜国产成人| 日韩天堂在线观看| 国产免费a级片| 网友自拍一区| 伊人成人开心激情综合网| 黄色片在线观看免费| 日韩精品91| 欧美成人激情在线| 亚洲精品视频在线观看免费视频| 亚洲看片一区| 国产精品久久久久久搜索 | 日韩一区不卡| 日本免费在线视频| 亚洲免费观看高清完整版在线观看 | 超碰97在线资源站| 国产亚洲欧美日韩在线观看一区二区| 伊人av综合网| 美女视频黄免费| 国产精品视频久久一区| 国产精品成人播放| www.爱爱.com| 久久亚洲一区二区三区四区| 亚洲欧美日韩国产yyy| 午夜羞羞小视频在线观看| 天天综合日日夜夜精品| 中文字幕国产传媒| 国产成人夜色高潮福利影视| 亚洲日韩中文字幕在线播放| 极品美妇后花庭翘臀娇吟小说| 亚洲欧美综合| 国产999精品久久久| 国产成人精品av在线观| 99视频精品在线| 亚洲精品一区二区毛豆| 久久青青色综合| 欧美视频在线观看一区二区| 手机看片国产精品| 国产成人精品三级高清久久91| 日日狠狠久久偷偷四色综合免费| 日本视频www| 精品一区二区三区视频| 久久国产主播精品| 尤物yw193can在线观看| 在线免费精品视频| 日韩av成人网| 人人狠狠综合久久亚洲婷| 欧美精品videos性欧美| 中文字幕av无码一区二区三区| 国产.欧美.日韩| 亚洲 日韩 国产第一区| 国产高清自产拍av在线| 欧美电影一区二区三区| 欧美黄色激情视频| 99精品热6080yy久久| 91免费版黄色| 日韩在线资源| 在线日韩一区二区| 中出视频在线观看| 欧美91大片| 成人性生交大片免费看小说| 九色在线观看视频| 狠狠干狠狠久久| 亚洲av无码一区东京热久久| 伊人色**天天综合婷婷| 国产欧美精品久久久| 黄色毛片在线观看| 偷拍日韩校园综合在线| 黑森林av导航| 国产综合精品| 成人9ⅰ免费影视网站| av在线免费网站| 欧美日韩亚洲不卡| 大吊一区二区三区| 轻轻草成人在线| 日韩欧美亚洲v片| 日本不卡一二三| 亚洲美女免费精品视频在线观看| 日本在线视频中文字幕| 国产91色综合久久免费分享| 成人国产一区二区三区| 精品国产不卡一区二区| 久久影院免费观看| 国产欧美第一页| 亚洲精选免费视频| 男男受被啪到高潮自述| 91精品国产自产拍在线观看蜜| 国产日韩在线亚洲字幕中文| 日本亚洲精品| 91精品在线免费| 色欲人妻综合网| 国产经典欧美精品| 一级性生活视频| 亚洲精品一区二区三区在线| 欧美成人免费小视频| www.四虎在线观看| 亚洲一区二区免费视频| 91成人在线观看喷潮蘑菇| 一区在线免费观看| 精品一区二区国产| 亚洲天堂资源| 这里精品视频免费| 91亚洲精品国偷拍自产在线观看| 最新久久zyz资源站| 一级黄色免费毛片| 亚洲黄网站黄| 日本一区免费在线观看| 精品国产黄a∨片高清在线| 久久精品视频在线| 精品区在线观看| 欧美日韩国产一区中文午夜| 日韩丰满少妇无码内射| 激情欧美日韩一区二区| 日韩 欧美 视频| 久久91麻豆精品一区| 国产日韩欧美影视| xxx.xxx欧美| 亚洲欧美日韩成人| 国产又粗又猛视频免费| 一区二区三区日本| 人妻少妇无码精品视频区| 久久99深爱久久99精品| 欧美精品久久久久久久自慰 | 亚洲欧美在线一区| 亚洲图片欧美在线| 亚洲午夜一二三区视频| 精品国产av无码| 国产一区999| 99精品视频在线看| 一区二区免费不卡在线| 久久国产精品-国产精品| 国产精品99| 2020国产精品视频| 天堂а√在线资源在线| 欧美精品一区二区不卡| 国产九色91回来了| 亚洲午夜电影网| 婷婷丁香综合网| 99九九99九九九视频精品| 91女神在线观看| 亚洲深夜激情| japanese在线播放| 欧美在线免费看视频| 国产伦精品一区二区三毛| 免费一级欧美在线观看视频| 91a在线视频| 中文字幕在线观看播放| 一区二区成人av| 日韩在线免费播放| 日韩一级成人av| 91精品视频免费在线观看| 精品成人久久av| 麻豆亚洲av成人无码久久精品| 中文字幕av资源一区| 狠狠人妻久久久久久综合蜜桃| 国内不卡的二区三区中文字幕| 精品一区二区中文字幕| 好吊视频一区二区三区四区| 中文字幕一区综合| re久久精品视频| 日本一区二区三区免费观看| 色橹橹欧美在线观看视频高清| 亚洲a级在线观看| 亚洲日本免费电影| 国产精品免费久久久久影院| 亚洲美女尤物影院| 午夜精品久久久99热福利| 免费影视亚洲| 欧美黄色成人网| 99视频免费在线观看| 自拍偷拍亚洲精品| 自拍视频在线网| 国产一级揄自揄精品视频| 欧美日韩伦理片| 亚洲免费福利视频| 日韩二区三区| 亚洲精品在线视频| 欧美孕妇孕交| 亚洲男子天堂网| 国产高清av在线| 国产亚洲一区精品| 在线观看h片| 日韩亚洲精品视频| 免费黄色电影在线观看| 久久精品国产精品| 麻豆影院在线观看| 欧美另类xxx| 欧美另类tv| 国语自产精品视频在免费| 2021中文字幕在线| 欧美做受高潮电影o| 中文不卡1区2区3区| 国产va免费精品高清在线观看| 手机看片久久| 国产精品视频导航| 精品自拍视频| 亚洲伊人久久综合| 蜜桃视频在线观看成人| www.激情五月.com| 91精品免费观看| 国产视频在线观看视频| 日韩午夜精品视频| 可以免费观看的毛片| 亚洲国产精品va在线看黑人| 五月婷婷久久久| 亚洲视频视频在线| 免费在线看黄网站| 欧美高清在线播放| 国内精彩免费自拍视频在线观看网址| 98精品在线视频| 亚洲综合在线电影| 国产在线观看一区二区三区 | 欧美性猛交xxxxxx富婆| 91麻豆成人精品国产| 欧美一级日韩一级| 日韩在线观看视频一区| 亚洲色图35p| 黄色精品免费看| 午夜精品久久久久久久99热| 日本.亚洲电影| av一本久道久久波多野结衣| 亚洲成人一品| 亚洲综合激情五月| 一本色道久久综合| 在线黄色免费看| 成人激情校园春色| 手机看片日韩av| 亚洲一区二区三区四区在线| 91玉足脚交嫩脚丫在线播放| 欧美高清视频在线高清观看mv色露露十八 | 欧美一区二区大片| 秋霞av在线| 久热国产精品视频| 电影网一区二区| 亚洲www在线观看| 国产91久久精品一区二区| 五月天在线免费视频| 麻豆九一精品爱看视频在线观看免费| 日本中文字幕观看| 久久久久久久综合日本| 欧美日韩偷拍视频| 欧美日韩不卡一区二区| 无码精品在线观看| 欧美日本黄视频| 免费高清视频在线一区| 国产日韩亚洲精品| 亚洲成人二区| 高清一区二区视频| 97se亚洲国产综合在线| 岛国毛片在线观看| 欧美美女一区二区| 免费成人av电影| 国内精品400部情侣激情| 精品国产三级| 亚洲一区三区视频在线观看| 国产欧美在线| 蜜臀视频在线观看| 亚洲欧美电影院| 一区二区自拍偷拍| 一区二区福利视频| 成人在线爆射| 欧美日韩大片一区二区三区| 亚洲麻豆av| 91九色蝌蚪porny| 亚洲天堂成人网| 一本色道久久综合熟妇| 一道本无吗dⅴd在线播放一区| 亚洲精品动漫| 久久涩涩网站| 国产偷自视频区视频一区二区| 佐佐木明希电影| 亚洲第一福利一区| 韩国av在线免费观看| 欧美日韩国产va另类| 日韩中文字幕在线一区| 在线观看日韩羞羞视频| 久久草av在线| 日韩欧美在线视频播放| 欧美午夜精品久久久| 在线观看美女网站大全免费| 国产精品va在线播放| 精品国产一区二区三区| 欧美三级理论片| 亚洲欧洲av在线| 国产精品伦一区二区三区| 日韩中文在线中文网在线观看| 天然素人一区二区视频| 亚洲欧美久久久久一区二区三区| 美腿丝袜一区二区三区| 国产白丝一区二区三区| 91麻豆精品国产91久久久资源速度 | 黄上黄在线观看| 国产精品丝袜视频| 国产高清一区二区| 先锋资源在线视频| 亚洲综合色视频| 香蕉视频成人在线| 日韩av免费看| 久久国产亚洲| 色哟哟免费视频| 香蕉av福利精品导航| 欧美性孕妇孕交| 国产狼人综合免费视频| 亚洲国产精品久久久久蝴蝶传媒| 一级全黄裸体片| 好吊成人免视频| 91在线直播| 91免费在线观看网站| 亚洲永久网站| 日本成人精品视频| 精品久久久久一区| 成人做爰视频www网站小优视频| 亚洲精美视频| 国产不卡视频一区| 丁香六月婷婷综合| 精品国产一区久久久| 成人涩涩网站| 亚洲一级免费观看| 亚洲在线视频免费观看| 国产小视频福利在线| 亚洲一区亚洲二区亚洲三区| 国产毛片一区| 色在线观看视频| 亚洲免费小视频| 蜜桃精品视频| 十八禁视频网站在线观看| 亚洲人成网站色在线观看| 日本在线一二三| 91pron在线| 日本亚洲欧美天堂免费| 免费无遮挡无码永久在线观看视频 | av在线不卡观看| 日韩电影在线观看一区| 久久久久久久久99| 中文字幕在线看视频国产欧美在线看完整| 99热这里只有精品首页| 黄色三级视频在线| 懂色aⅴ精品一区二区三区蜜月|