日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

Spring5源码 - 07 Spring Bean 生命周期流程 源码解读02

發布時間:2025/3/21 javascript 13 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spring5源码 - 07 Spring Bean 生命周期流程 源码解读02 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • Pre
  • 通俗流程
  • finishBeanFactoryInitialization


Pre

Spring5源碼 - 06 Spring Bean 生命周期流程 概述 01

接上文

通俗流程

下面說個比較常見的主干流程

  • 實例化Bean對象,這個時候Bean的對象是非常低級的,基本不能夠使用,因為連最基本的屬性都沒有設置,可以理解為
    連Autowired注解都是沒有解析的;
  • 填充屬性,當做完這一步,Bean對象基本是完整的了,可以理解為Autowired注解已經解析完畢,依賴注入完成了;
  • 如果Bean實現了BeanNameAware接口,則調用setBeanName方法;
  • 如果Bean實現了BeanClassLoaderAware接口,則調用setBeanClassLoader方法;
  • 如果Bean實現了BeanFactoryAware接口,則調用setBeanFactory方法;
  • 調用BeanPostProcessor的postProcessBeforeInitialization方法;
  • 如果Bean實現了InitializingBean接口,調用afterPropertiesSet方法;
  • 如果Bean定義了init-method方法,則調用Bean的init-method方法;
  • 調用BeanPostProcessor的postProcessAfterInitialization方法;當進行到這一步,Bean已經被準備就緒了,一直停留在應用的
    上下文中,直到被銷毀;
  • 如果應用的上下文被銷毀了,如果Bean實現了DisposableBean接口,則調用destroy方法,如果Bean定義了destory-method
    聲明了銷毀方法也會被調用。

  • finishBeanFactoryInitialization

    完成Bean的初始化

    /*** Finish the initialization of this context's bean factory,* initializing all remaining singleton beans.*/protected void finishBeanFactoryInitialization(ConfigurableListableBeanFactory beanFactory) {// bean工廠創建類型轉化器 Convert/*** public class String2DateConversionService implements Converter<String,Date> {public Date convert(String source) {SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");try {return sdf.parse(source);} catch (ParseException e) {return null;}}}@Beanpublic ConversionServiceFactoryBean conversionService() {ConversionServiceFactoryBean factoryBean = new ConversionServiceFactoryBean();Set<Converter> converterSet = new HashSet<Converter>();converterSet.add(new String2DateConversionService());factoryBean.setConverters(converterSet);return factoryBean;}ConversionServiceFactoryBean conversionServiceFactoryBean = (ConversionServiceFactoryBean) ctx.getBean(ConversionServiceFactoryBean.class);conversionServiceFactoryBean.getObject().convert("2019-06-03 12:00:00",Date.class)*/if (beanFactory.containsBean(CONVERSION_SERVICE_BEAN_NAME) &&beanFactory.isTypeMatch(CONVERSION_SERVICE_BEAN_NAME, ConversionService.class)) {beanFactory.setConversionService(beanFactory.getBean(CONVERSION_SERVICE_BEAN_NAME, ConversionService.class));}/*** public class MainConfig implements EmbeddedValueResolverAware{** public void setEmbeddedValueResolver(StringValueResolver resolver) {this.jdbcUrl = resolver.resolveStringValue("${ds.jdbcUrl}");this.classDriver = resolver.resolveStringValue("${ds.classDriver}");}}*/if (!beanFactory.hasEmbeddedValueResolver()) {beanFactory.addEmbeddedValueResolver(strVal -> getEnvironment().resolvePlaceholders(strVal));}// 處理aspectjString[] weaverAwareNames = beanFactory.getBeanNamesForType(LoadTimeWeaverAware.class, false, false);for (String weaverAwareName : weaverAwareNames) {getBean(weaverAwareName);}// Stop using the temporary ClassLoader for type matching.beanFactory.setTempClassLoader(null);//凍結所有的 bean 定義 , 說明注冊的 bean 定義將不被修改或任何進一步的處理beanFactory.freezeConfiguration();//實例化剩余的單實例beanbeanFactory.preInstantiateSingletons();}

    繼續

    beanFactory.preInstantiateSingletons(); @Overridepublic void preInstantiateSingletons() throws BeansException {if (logger.isDebugEnabled()) {logger.debug("Pre-instantiating singletons in " + this);}//獲取我們容器中所有bean定義的名稱List<String> beanNames = new ArrayList<>(this.beanDefinitionNames);//循環我們所有的bean定義名稱for (String beanName : beanNames) {//合并我們的bean定義RootBeanDefinition bd = getMergedLocalBeanDefinition(beanName);/*** 根據bean定義判斷是不是抽象的&& 不是單例的 &&不是懶加載的*/if (!bd.isAbstract() && bd.isSingleton() && !bd.isLazyInit()) {//是不是工廠beanif (isFactoryBean(beanName)) {//是的話 給beanName+前綴&符號Object bean = getBean(FACTORY_BEAN_PREFIX + beanName);if (bean instanceof FactoryBean) {final FactoryBean<?> factory = (FactoryBean<?>) bean;boolean isEagerInit;if (System.getSecurityManager() != null && factory instanceof SmartFactoryBean) {isEagerInit = AccessController.doPrivileged((PrivilegedAction<Boolean>)((SmartFactoryBean<?>) factory)::isEagerInit,getAccessControlContext());}else {isEagerInit = (factory instanceof SmartFactoryBean &&((SmartFactoryBean<?>) factory).isEagerInit());}//調用真正的getBean的流程if (isEagerInit) {getBean(beanName);}}}else {//非工廠Bean 就是普通的beangetBean(beanName);}}}//或有的bean的名稱 ...........到這里所有的單實例的bean已經記載到單實例bean到緩存中for (String beanName : beanNames) {//從單例緩存池中獲取所有的對象Object singletonInstance = getSingleton(beanName);//判斷當前的bean是否實現了SmartInitializingSingleton接口if (singletonInstance instanceof SmartInitializingSingleton) {final SmartInitializingSingleton smartSingleton = (SmartInitializingSingleton) singletonInstance;if (System.getSecurityManager() != null) {AccessController.doPrivileged((PrivilegedAction<Object>) () -> {smartSingleton.afterSingletonsInstantiated();return null;}, getAccessControlContext());}else {//觸發實例化之后的方法afterSingletonsInstantiatedsmartSingleton.afterSingletonsInstantiated();}}}}

    重點方法肯定是 getBean(beanName);咯


    總結

    以上是生活随笔為你收集整理的Spring5源码 - 07 Spring Bean 生命周期流程 源码解读02的全部內容,希望文章能夠幫你解決所遇到的問題。

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

    主站蜘蛛池模板: 自拍偷拍一区 | 国产高潮视频在线观看 | 中文字幕成人在线视频 | 女人黄色片 | 绿帽av| 在线观看免费视频国产 | 午夜黄色小视频 | 国产高潮视频在线观看 | 无码精品一区二区三区AV | 成年人在线观看视频网站 | 日韩欧美的一区二区 | 国产成人三级在线观看视频 | 日本黄页网站免费大全 | 四季av中文字幕 | 日本高清www免费视频 | 2024国产精品 | 午夜一区二区三区在线 | 狠狠的日 | 久操视频免费看 | 一区二区三区四区在线免费观看 | 亚洲九九爱| 美女高潮黄又色高清视频免费 | 麻豆视频网站入口 | 制服.丝袜.亚洲.另类.中文 | 内射合集对白在线 | 国产乱码精品1区2区3区 | 就去色综合 | 亚洲国产无码精品 | 亚洲人 女学生 打屁股 得到 | 亚洲第一福利网站 | 538任你躁在线精品免费 | 国产a v一区二区三区 | 免费无码肉片在线观看 | 国产三级精品三级 | 综合精品久久 | 一区二区日韩在线观看 | 国产精品揄拍一区二区 | www.国产精品.com | 日韩亚洲欧美一区二区 | 日噜噜夜噜噜 | 国产黄色大全 | 日韩另类 | 精品国产一区二区三区四 | 在线观看的黄网 | 都市激情男人天堂 | 桃色激情网 | 免费成人深夜夜行网站视频 | 日韩欧美综合一区 | 天堂8在线| 国产乱在线| 天天操狠狠操夜夜操 | 91免费视频入口 | 国产日韩欧美精品在线观看 | 一区二区久久久 | 日韩乱码人妻无码系列中文字幕 | 一本色道久久综合亚洲精品图片 | 亚洲码中文 | 成人免费福利视频 | 精品国产视频一区二区三区 | 午夜影院在线观看免费 | 中文字幕亚洲视频 | 色老头在线一区二区三区 | 人妻巨大乳一二三区 | 欧美少妇喷水 | 日本美女一区二区 | 日本一区二区三区四区在线观看 | 亚洲乱妇| 日本一二三视频 | 日本a在线 | 大尺度av在线 | 黄网页在线观看 | 高h奶汁双性受1v1 | 交专区videossex | 亚洲天天看 | 严厉高冷老师动漫播放 | 国产一区二区三区18 | 日韩中文字幕免费视频 | 葵司ssni-879在线播放 | 热热色原网址 | 香蕉视频链接 | 久久久久99精品成人片三人毛片 | 欧美爱爱一区二区 | 人人草人人干 | 欧美大胆视频 | 男女一级特黄 | 国产精品久久9 | 男女日批在线观看 | 亚洲国产一级 | 欧美综合影院 | 亚洲精品88 | 亚洲av成人无码一二三在线观看 | 精品三级国产 | 爽爽影院免费观看 | 99re这里只有精品在线 | 国内精品嫩模av私拍在线观看 | 182午夜视频 | 男人午夜天堂 | 黄91在线观看 | 国产精品丝袜黑色高跟鞋 |