亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Java > 正文

談談我對Spring Bean 生命周期的理解

2024-07-14 08:40:11
字體:
來源:轉載
供稿:網友

前言

Spring的ioc容器功能非常強大,負責Spring的Bean的創建和管理等功能。而Spring 的bean是整個Spring應用中很重要的一部分,了解Spring Bean的生命周期對我們了解整個spring框架會有很大的幫助。

BeanFactory和ApplicationContext是Spring兩種很重要的容器,前者提供了最基本的依賴注入的支持,而后者在繼承前者的基礎進行了功能的拓展,例如增加了事件傳播,資源訪問和國際化的消息訪問等功能。本文主要介紹了ApplicationContext和BeanFactory兩種容器的Bean的生命周期。

首先看下生命周期圖:

spring,bean,生命周期

再談生命周期之前有一點需要先明確:

Spring 只幫我們管理單例模式 Bean 的 完整 生命周期,對于 prototype 的 bean ,Spring 在創建好交給使用者之后則不會再管理后續的生命周期。

注解方式

在 bean 初始化時會經歷幾個階段,首先可以使用注解 @PostConstruct , @PreDestroy 來在 bean 的創建和銷毀階段進行調用:

@Componentpublic class AnnotationBean {  private final static Logger LOGGER = LoggerFactory.getLogger(AnnotationBean.class);  @PostConstruct  public void start(){    LOGGER.info("AnnotationBean start");  }  @PreDestroy  public void destroy(){    LOGGER.info("AnnotationBean destroy");  }}

InitializingBean, DisposableBean 接口

還可以實現 InitializingBean,DisposableBean 這兩個接口,也是在初始化以及銷毀階段調用:

@Servicepublic class SpringLifeCycleService implements InitializingBean,DisposableBean{  private final static Logger LOGGER = LoggerFactory.getLogger(SpringLifeCycleService.class);  @Override  public void afterPropertiesSet() throws Exception {    LOGGER.info("SpringLifeCycleService start");  }  @Override  public void destroy() throws Exception {    LOGGER.info("SpringLifeCycleService destroy");  }}

自定義初始化和銷毀方法

也可以自定義方法用于在初始化、銷毀階段調用:

@Configurationpublic class LifeCycleConfig {  @Bean(initMethod = "start", destroyMethod = "destroy")  public SpringLifeCycle create(){    SpringLifeCycle springLifeCycle = new SpringLifeCycle() ;    return springLifeCycle ;  }}public class SpringLifeCycle{  private final static Logger LOGGER = LoggerFactory.getLogger(SpringLifeCycle.class);  public void start(){    LOGGER.info("SpringLifeCycle start");  }  public void destroy(){    LOGGER.info("SpringLifeCycle destroy");  }}

以上是在 SpringBoot 中可以這樣配置,如果是原始的基于 XML 也是可以使用:

<bean class="com.crossoverjie.spring.SpringLifeCycle" init-method="start" destroy-method="destroy"></bean>

來達到同樣的效果。

實現 *Aware 接口

*Aware 接口可以用于在初始化 bean 時獲得 Spring 中的一些對象,如獲取 Spring 上下文 等。

@Componentpublic class SpringLifeCycleAware implements ApplicationContextAware {  private final static Logger LOGGER = LoggerFactory.getLogger(SpringLifeCycleAware.class);  private ApplicationContext applicationContext ;  @Override  public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {    this.applicationContext = applicationContext ;    LOGGER.info("SpringLifeCycleAware start");  }}

這樣在 springLifeCycleAware 這個 bean 初始化會就會調用 setApplicationContext 方法,并可以獲得 applicationContext 對象。

BeanPostProcessor 增強處理器

實現 BeanPostProcessor 接口,Spring 中所有 bean 在做初始化時都會調用該接口中的兩個方法,可以用于對一些特殊的 bean 進行處理:

@Componentpublic class SpringLifeCycleProcessor implements BeanPostProcessor {  private final static Logger LOGGER = LoggerFactory.getLogger(SpringLifeCycleProcessor.class);  /**   * 預初始化 初始化之前調用   * @param bean   * @param beanName   * @return   * @throws BeansException   */  @Override  public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {    if ("annotationBean".equals(beanName)){      LOGGER.info("SpringLifeCycleProcessor start beanName={}",beanName);    }    return bean;  }  /**   * 后初始化 bean 初始化完成調用   * @param bean   * @param beanName   * @return   * @throws BeansException   */  @Override  public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {    if ("annotationBean".equals(beanName)){      LOGGER.info("SpringLifeCycleProcessor end beanName={}",beanName);    }    return bean;  }}

執行之后觀察結果:

018-03-21 00:40:24.856 [restartedMain] INFO c.c.s.p.SpringLifeCycleProcessor - SpringLifeCycleProcessor start beanName=annotationBean2018-03-21 00:40:24.860 [restartedMain] INFO c.c.spring.annotation.AnnotationBean - AnnotationBean start2018-03-21 00:40:24.861 [restartedMain] INFO c.c.s.p.SpringLifeCycleProcessor - SpringLifeCycleProcessor end beanName=annotationBean2018-03-21 00:40:24.864 [restartedMain] INFO c.c.s.aware.SpringLifeCycleAware - SpringLifeCycleAware start2018-03-21 00:40:24.867 [restartedMain] INFO c.c.s.service.SpringLifeCycleService - SpringLifeCycleService start2018-03-21 00:40:24.887 [restartedMain] INFO c.c.spring.SpringLifeCycle - SpringLifeCycle start2018-03-21 00:40:25.062 [restartedMain] INFO o.s.b.d.a.OptionalLiveReloadServer - LiveReload server is running on port 357292018-03-21 00:40:25.122 [restartedMain] INFO o.s.j.e.a.AnnotationMBeanExporter - Registering beans for JMX exposure on startup2018-03-21 00:40:25.140 [restartedMain] INFO com.crossoverjie.Application - Started Application in 2.309 seconds (JVM running for 3.681)2018-03-21 00:40:25.143 [restartedMain] INFO com.crossoverjie.Application - start ok!2018-03-21 00:40:25.153 [Thread-8] INFO o.s.c.a.AnnotationConfigApplicationContext - Closing org.springframework.context.annotation.AnnotationConfigApplicationContext@3913adad: startup date [Wed Mar 21 00:40:23 CST 2018]; root of context hierarchy2018-03-21 00:40:25.155 [Thread-8] INFO o.s.j.e.a.AnnotationMBeanExporter - Unregistering JMX-exposed beans on shutdown2018-03-21 00:40:25.156 [Thread-8] INFO c.c.spring.SpringLifeCycle - SpringLifeCycle destroy2018-03-21 00:40:25.156 [Thread-8] INFO c.c.s.service.SpringLifeCycleService - SpringLifeCycleService destroy2018-03-21 00:40:25.156 [Thread-8] INFO c.c.spring.annotation.AnnotationBean - AnnotationBean destroy

直到 Spring 上下文銷毀時則會調用自定義的銷毀方法以及實現了 DisposableBean 的 destroy() 方法。

總結

以上所述是小編給大家介紹的Spring Bean 生命周期,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對VeVb武林網網站的支持!


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美裸体xxxxx| 国产精品对白刺激| 日本三级久久久| 欧美国产高跟鞋裸体秀xxxhd| 美女国内精品自产拍在线播放| 欧美肥老太性生活视频| 久热爱精品视频线路一| 欧日韩在线观看| 成人黄色午夜影院| 久久国产色av| 午夜免费久久久久| 国产精品欧美在线| 欧美激情一级欧美精品| 欧美激情亚洲综合一区| 少妇高潮 亚洲精品| 2018国产精品视频| 国产91色在线|| 欧美一级淫片aaaaaaa视频| 日韩精品视频免费在线观看| 亚洲精品一区二区三区婷婷月| 91亚洲国产成人久久精品网站| 性欧美xxxx视频在线观看| 狠狠色狠狠色综合日日小说| 91夜夜揉人人捏人人添红杏| 国产精品美女av| 亚洲欧美中文字幕在线一区| 91网在线免费观看| 久久中文字幕在线| 中文字幕日韩视频| 91亚洲午夜在线| 亚洲欧美三级在线| 亚洲国产精品久久久| 久久久久久久999| 在线观看国产精品91| 欧美黑人xxx| 国产一区红桃视频| 国产精品入口夜色视频大尺度| 97福利一区二区| 日韩成人xxxx| 性色av一区二区三区红粉影视| 精品视频在线播放| 国产精品久久77777| 亚洲黄页网在线观看| 国产精品普通话| 亚洲一级一级97网| 亚洲国产一区二区三区四区| 亚洲欧美激情另类校园| 欧美最顶级丰满的aⅴ艳星| 色综合久久天天综线观看| 国产精品久久久久久av下载红粉| 久久成人一区二区| 精品国产乱码久久久久酒店| 国产精品27p| 成人黄色av免费在线观看| 成人免费高清完整版在线观看| 秋霞成人午夜鲁丝一区二区三区| 夜色77av精品影院| 国产精品久久久久99| 亚洲成人动漫在线播放| 91国自产精品中文字幕亚洲| 亚洲性av在线| 韩国三级电影久久久久久| 中文字幕国产精品久久| 欧美国产在线电影| 国产精品日韩在线播放| 国产精品久久中文| 久久亚洲电影天堂| 日韩久久精品成人| 国产日韩欧美电影在线观看| 久久久久久亚洲| 中文字幕不卡在线视频极品| 欧美激情综合色综合啪啪五月| 国产精品激情av电影在线观看| 88国产精品欧美一区二区三区| 欧美与欧洲交xxxx免费观看| 日韩精品中文字幕视频在线| 亚洲欧美综合v| 国产精品一区av| 国产99视频精品免视看7| 免费91麻豆精品国产自产在线观看| 国产精品久久久久久久久久久新郎| 国产欧美日韩免费| 成年人精品视频| 色青青草原桃花久久综合| 欧美成人国产va精品日本一级| 欧美日韩国产123| 欧美视频免费在线观看| 亚洲第一精品久久忘忧草社区| 精品国产精品自拍| 日韩福利伦理影院免费| 中文字幕免费精品一区高清| 日韩**中文字幕毛片| 国产精品第一第二| 久久久久久这里只有精品| 亚洲自拍欧美色图| 这里只有精品视频在线| 欧美极品少妇与黑人| 欧美激情网友自拍| 欧美日韩国产色| 欧美专区在线视频| 欧美精品久久久久久久久久| 中文字幕在线亚洲| 欧美日韩福利在线观看| 97久久久免费福利网址| 亚洲福利视频二区| 亚洲综合在线中文字幕| 国产在线视频不卡| 91国产中文字幕| 国产一级揄自揄精品视频| 亚洲专区国产精品| 国产精品成人久久久久| 成人免费在线视频网址| 欧美老女人性视频| 久久久精品2019中文字幕神马| 欧美日韩精品中文字幕| 亚洲最新在线视频| 欧美性感美女h网站在线观看免费| 欧洲美女7788成人免费视频| 欧美成人精品一区二区三区| 国产精品99久久久久久久久| 成人黄色免费网站在线观看| 亚洲欧美制服另类日韩| 狠狠躁18三区二区一区| 国产在线播放91| 日韩免费电影在线观看| 欧美国产日韩xxxxx| 久久99精品久久久久久青青91| 久久精品视频99| 国产亚洲xxx| 不卡在线观看电视剧完整版| 一区二区三区视频免费在线观看| 亚洲精品自拍第一页| 亚洲视屏在线播放| 日韩国产一区三区| 日韩电影免费观看中文字幕| 国产精选久久久久久| 久久久久国产精品免费网站| 精品成人av一区| 亚洲伊人久久综合| 不卡av日日日| 国产精品电影网| 国产精品主播视频| 日韩电视剧在线观看免费网站| 国产成人鲁鲁免费视频a| 国产精品午夜一区二区欲梦| 国产日韩精品一区二区| 亚洲视频精品在线| 久久久久久69| 色琪琪综合男人的天堂aⅴ视频| 97在线精品国自产拍中文| 国产午夜精品久久久| 久久久之久亚州精品露出| 狠狠综合久久av一区二区小说| 欧美精品成人91久久久久久久| 亚洲精品福利在线| 97在线精品国自产拍中文| 久久国产精品首页| 久久成人精品一区二区三区| 国产精品久久久久久久午夜| 18一19gay欧美视频网站| 欧美成人免费全部观看天天性色| 亚洲欧美福利视频| 日本精品久久中文字幕佐佐木| 97视频在线观看播放|