亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

一文搞懂Spring中Bean的生命周期

 更新時間:2022年06月08日 08:42:44   作者:夏志121  
這篇文章主要為大家介紹了Spring中Bean生命周期的使用及控制,文中的示例代碼講解詳細,對我們學(xué)習(xí)或工作有一定的參考價值,感興趣的可以學(xué)習(xí)一下

生命周期:從創(chuàng)建到消亡的完整過程

bean聲明周期:bean從創(chuàng)建到銷毀的整體過程

bean聲明周期控制:在bean創(chuàng)建后到銷毀前做一些事情

一、使用配置生命周期的方法

在BookDaoImpl中實現(xiàn)類中創(chuàng)建相應(yīng)的方法:

//表示bean初始化對應(yīng)的操作
    public void init(){
        System.out.println("init...");
    }
    //表示bean銷毀前對應(yīng)的操作
    public void destory(){
        System.out.println("destory...");
    }

applicationContext.xml配置初始化聲明周期回調(diào)函數(shù)及銷毀聲明周期回調(diào)函數(shù)

 <!--init-method:設(shè)置bean初始化生命周期回調(diào)函數(shù)-->
    <!--destroy-method:設(shè)置bean銷毀生命周期回調(diào)函數(shù),僅適用于單例對象-->
    <bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl" init-method="init" destroy-method="destory"/>

執(zhí)行結(jié)果:

虛擬機退出,沒有給bean銷毀的機會。

可利用ClassPathXmlApplictionContext里的close方法主動關(guān)閉容器,就會執(zhí)行銷毀方法。

import com.itheima.dao.BookDao;
import org.springframework.context.support.ClassPathXmlApplicationContext;
 
public class AppForLifeCycle {
    public static void main( String[] args ) {
        ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
 
        BookDao bookDao = (BookDao) ctx.getBean("bookDao");
        bookDao.save();
 
        //關(guān)閉容器
        ctx.close();
    }
}

執(zhí)行結(jié)果:

不過這種方式比較暴力,容器還提供另外的方法

在AppForLifeCycle中用關(guān)閉鉤子函數(shù)

//注冊關(guān)閉鉤子函數(shù),在虛擬機退出之前回調(diào)此函數(shù),關(guān)閉容器
        ctx.registerShutdownHook();

執(zhí)行結(jié)果:

關(guān)閉鉤子在任何時間都可以執(zhí)行,close關(guān)閉比較暴力。

二、生命周期控制——接口控制(了解)

applicationContext.xml配置:

    <bean id="bookService" class="com.itheima.service.impl.BookServiceImpl">
        <property name="bookDao" ref="bookDao"/>
    </bean>

BookServiceImpl:

可以利用接口InitializingBean和DisposableBean來設(shè)置初始化和銷毀后的方法設(shè)置

import com.itheima.dao.BookDao;
import com.itheima.service.BookService;
import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.InitializingBean;
 
public class BookServiceImpl implements BookService, InitializingBean, DisposableBean {
    private BookDao bookDao;
 
    public void setBookDao(BookDao bookDao) {
        System.out.println("set .....");
        this.bookDao = bookDao;
    }
 
    public void save() {
        System.out.println("book service save ...");
        bookDao.save();
    }
 
    public void destroy() throws Exception {
        System.out.println("service destroy");
    }
 
    public void afterPropertiesSet() throws Exception {
        System.out.println("service init");
    }
}

執(zhí)行結(jié)果:

可以看出set在執(zhí)行在init的執(zhí)行之后,當(dāng)你的屬性設(shè)置完以后,才去執(zhí)行afterPropertiesSet,所有才叫afterPropertiesSet,在屬性設(shè)置之后。

小結(jié)

生命周期總結(jié)

初始化容器

  • 1、創(chuàng)建對象
  • 2、執(zhí)行構(gòu)造方法
  • 3、執(zhí)行屬性注入(set操作)
  • 4、執(zhí)行bean初始化方法

使用bean

執(zhí)行業(yè)務(wù)操作

關(guān)閉/銷毀容器

執(zhí)行bean操作

1、bean生命周期控制

配置

init-method
destroy-method

接口(了解)

InitializingBean
DisposableBean

2、關(guān)閉容器

ConfigurableApplicationContext

close()
registerShutdownHook()

到此這篇關(guān)于一文搞懂Spring中Bean的生命周期的文章就介紹到這了,更多相關(guān)Spring Bean生命周期內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 深入理解Java class文件格式_動力節(jié)點Java學(xué)院整理

    深入理解Java class文件格式_動力節(jié)點Java學(xué)院整理

    對于理解JVM和深入理解Java語言, 學(xué)習(xí)并了解class文件的格式都是必須要掌握的功課
    2017-06-06
  • Java的包裝類特性總結(jié)

    Java的包裝類特性總結(jié)

    這篇文章主要介紹Java的包裝類的一些特性,包裝類的作用,哪些類屬于包裝類等,文中有詳細的代碼示例,對我們的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2023-05-05
  • 如何處理器攔截器(HandlerInterceptor)

    如何處理器攔截器(HandlerInterceptor)

    這篇文章主要介紹了如何處理器攔截器(HandlerInterceptor)問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • Mybatis-plus通用查詢方法封裝的實現(xiàn)

    Mybatis-plus通用查詢方法封裝的實現(xiàn)

    本文主要介紹了Mybatis-plus通用查詢方法封裝的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • springboot配置https安全連接的方法

    springboot配置https安全連接的方法

    這篇文章主要介紹了springboot配置https安全連接的方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • java定時器timer的使用方法代碼示例

    java定時器timer的使用方法代碼示例

    這篇文章主要介紹了java定時器timer的使用方法代碼示例,向大家分享了兩部分代碼,詳細內(nèi)容請參見正文,還是比較不錯的,需要的朋友可以參考下。
    2017-11-11
  • Java中如何比較兩個數(shù)組中元素是否相同

    Java中如何比較兩個數(shù)組中元素是否相同

    比較兩個數(shù)組中的元素是否相同,在項目中經(jīng)常會使用到,下面與大家分享個最簡單的方法
    2014-06-06
  • 詳解配置類為什么要添加@Configuration注解

    詳解配置類為什么要添加@Configuration注解

    這篇文章主要介紹了詳解配置類為什么要添加@Configuration注解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • Java并發(fā)編程中使用Executors類創(chuàng)建和管理線程的用法

    Java并發(fā)編程中使用Executors類創(chuàng)建和管理線程的用法

    這篇文章主要介紹了Java并發(fā)編程中使用Executors類創(chuàng)建和管理線程的用法,文中舉了用其啟動線程和設(shè)置線程優(yōu)先級的例子,需要的朋友可以參考下
    2016-03-03
  • 詳解SpringCloud-Alibaba-Seata分布式事務(wù)

    詳解SpringCloud-Alibaba-Seata分布式事務(wù)

    這篇文章主要介紹了SpringCloud-Alibaba-Seata分布式事務(wù)的相關(guān)知識,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-12-12

最新評論