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

Spring中Bean初始化和銷毀的方式總結(jié)

 更新時間:2023年04月17日 09:05:18   作者:歸去來?兮  
這篇文章主要為大家整理了Spring中Bean初始化和銷毀的多種方式,文中的示例代碼講解詳細,具有一定的借鑒價值,需要的可以了解一下

Spring中支持在Bean的加載時聲明初始化方法,該方法會在Bean對象完成初始化之前進行執(zhí)行,可以為對象指定一些特定的行為,同樣的Bean銷毀時,也是支持這個動作的。其中因為對象的作用域不同,銷毀的表現(xiàn)形式略有區(qū)別。初始化都沒有區(qū)別,無論是單例、原型、request、session、global session等他們的創(chuàng)建時初始化都沒啥區(qū)別,但是銷毀會略有區(qū)別,單例模式默認不會銷毀,只有在Spring容器被銷毀時才會執(zhí)行Bean的銷毀,從而執(zhí)行他的銷毀方法。session、request等他們是作用范圍到了就會被銷毀,并不會長期存在,所以他們的銷毀方法是在作用范圍執(zhí)行之后來調(diào)用的。

一、Bean的多種初始化方式

Spring中總共支持了三種方式對Bean進行初始化,依次是在方法上使用PostConstruct注解、實現(xiàn)InitializtingBean接口重寫對應方法、聲明init-method方法來實現(xiàn),且他們?nèi)齻€支持并行。也就是說我們可以三個都是用,當三個都是用時就是按照下面的順序執(zhí)行的,即限制性PostConstruct注解的方法,再執(zhí)行InitializingBean的方法,最終執(zhí)行init-method的方法。

1.PostConstruct注解

如下所示,這里使用配置類的方式進行注入,因為一會延時init-method必須使用配置類才可以實現(xiàn),啟動容器當加載TestA這個Bean時,他的初始化方法就會被執(zhí)行。

@Configuration
public class TestInitmestond {

    @Bean
    public TestA getBeanA(){
        return new TestA();
    }
}

class TestA{
    @PostConstruct
    public void postConstructor(){
        System.out.println("這是使用了PostConstruct注解的初始化方法");
    }

}

2.實現(xiàn)InitializingBean接口

下面是結(jié)合了第一種和第二種的初始化方式:

@Configuration
public class TestInitmestond {

    @Bean
    public TestA getBeanA(){
        return new TestA();
    }
}

class TestA implements InitializingBean {

    @Override
    public void afterPropertiesSet() throws Exception {
        System.out.println("這是實現(xiàn)InitializingBean的初始化方法");
    }

    @PostConstruct
    public void postConstructor(){
        System.out.println("這是使用了PostConstruct注解的初始化方法");
    }

}

3.聲明init-method方法

init-method方法必須使用配置類進行加載Bean才可以配置,因為該屬性是Bean標簽的屬性,在注解中也就是Bean注解的屬性,所以我們使用Component等其他IOC注解時是無法指定的。

@Configuration
public class TestInitmestond {

    @Bean(initMethod = "initMethod")
    public TestA getBeanA(){
        return new TestA();
    }
}

class TestA implements InitializingBean {

    @Override
    public void afterPropertiesSet() throws Exception {
        System.out.println("這是實現(xiàn)InitializingBean的初始化方法");
    }

    @PostConstruct
    public void postConstructor(){
        System.out.println("這是使用了PostConstruct注解的初始化方法");
    }

    public void initMethod(){
        System.out.println("這是使用了init-method聲明的初始化方法");
    }
}

下面啟動下容器展示下他們的執(zhí)行順序,如下:

可以看到他們的順序是固定的即:PostConstruct—>initializingBean—>init-method.

二、Bean的多種銷毀方式

同樣的Spring也支持了三種銷毀的方式,且這三種銷毀方式與三種創(chuàng)建方式是完全對應的。同時與初始化方法一樣Spring也是支持三種銷毀方法的并行的。且他們并行時順序是固定的:執(zhí)行PreDestroy–>DisposableBean–>destroy-method.

1.PreDestroy注解

這里容器采用手動啟動的方式進行創(chuàng)建,然后為容器設(shè)置一個銷毀的鉤子,這樣當容器銷毀時我們就可以去執(zhí)行銷毀方法了,對于單例模式的銷毀方法只能通過這種測試了,若是我們直接停止IDEA的服務(wù)是不會執(zhí)行銷毀方法的。不過對于scope不是singleton的Bean來說,比如request在正常服務(wù)里是可以體現(xiàn)銷毀動作的。

public class TestDestroyMethod {
    //手動啟動容器,模擬關(guān)閉
    public static void main(String[] args) {
        AnnotationConfigApplicationContext annotationConfigApplicationContext = new AnnotationConfigApplicationContext(TestConfig.class);
        annotationConfigApplicationContext.start();
        annotationConfigApplicationContext.registerShutdownHook();
    }
}
@Configuration
class TestConfig{

    @Bean
    public TestB getBean(){
        return new TestB();
    }
}
class TestB{

    @PreDestroy
    public void preDestroy(){
        System.out.println("這是使用PreDestroy注解的銷毀方法");
    }
}

2.實現(xiàn)DisposableBean接口

這種就是直接實現(xiàn)接口重寫destroy方法即可

public class TestDestroyMethod {
    //手動啟動容器,模擬關(guān)閉
    public static void main(String[] args) {
        AnnotationConfigApplicationContext annotationConfigApplicationContext = new AnnotationConfigApplicationContext(TestConfig.class);
        annotationConfigApplicationContext.start();
        annotationConfigApplicationContext.registerShutdownHook();
    }
}
@Configuration
class TestConfig{

    @Bean
    public TestB getBean(){
        return new TestB();
    }
}
class TestB implements DisposableBean {

    @PreDestroy
    public void preDestroy(){
        System.out.println("這是使用PreDestroy注解的銷毀方法");
    }

    @Override
    public void destroy() throws Exception {
        System.out.println("這是實現(xiàn)DisposableBean的方法");
    }
}

3.聲明destroy-method方法

下面是結(jié)合了三種銷毀方法的代碼

public class TestDestroyMethod {
    //手動啟動容器,模擬關(guān)閉
    public static void main(String[] args) {
        AnnotationConfigApplicationContext annotationConfigApplicationContext = new AnnotationConfigApplicationContext(TestConfig.class);
        annotationConfigApplicationContext.start();
        annotationConfigApplicationContext.registerShutdownHook();
    }
}
@Configuration
class TestConfig{

    @Bean(destroyMethod = "destroyMethod")
    public TestB getBean(){
        return new TestB();
    }
}
class TestB implements DisposableBean {

    @PreDestroy
    public void preDestroy(){
        System.out.println("這是使用PreDestroy注解的銷毀方法");
    }

    @Override
    public void destroy() throws Exception {
        System.out.println("這是實現(xiàn)DisposableBean的方法");
    }

    public void destroyMethod(){
        System.out.println("這是制定了destroy-method的銷毀方法");
    }
}

下面是執(zhí)行的截圖,可以看到三種銷毀方式與初始化方式一樣都是有固定順序的,事實上初始化方式與銷毀方式他們是有對應關(guān)系的。PostConstruct與PreDestroy是一組,InitializingBean與DisposableBean是一組,init-method與destroy-method是一組。

到此這篇關(guān)于Spring中Bean初始化和銷毀的方式總結(jié)的文章就介紹到這了,更多相關(guān)Spring Bean內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java中security與shiro的區(qū)別詳解

    Java中security與shiro的區(qū)別詳解

    這篇文章主要介紹了Java中security與shiro的區(qū)別詳解,Spring?Security在架構(gòu)上將認證與授權(quán)分離,并提供了擴展點,它是一個輕量級的安全框架,它確?;赟pring的應用程序提供身份驗證和授權(quán)支持,需要的朋友可以參考下
    2023-08-08
  • java Stream操作轉(zhuǎn)換方法

    java Stream操作轉(zhuǎn)換方法

    文章總結(jié)了Java 8中流(Stream) API的多種常用方法,包括創(chuàng)建流、過濾、遍歷、分組、排序、去重、查找、匹配、轉(zhuǎn)換、歸約、打印日志、最大最小值、統(tǒng)計、連接、函數(shù)式接口等,展示了流API在處理集合數(shù)據(jù)時的強大和靈活性,感興趣的朋友跟隨小編一起看看吧
    2025-01-01
  • 歸并排序的實現(xiàn)代碼與思路

    歸并排序的實現(xiàn)代碼與思路

    歸并排序是建立在歸并操作上的一種有效的排序算法。該算法是采用分治法(Divide and Conquer)的一個非常典型的應用。
    2013-03-03
  • 微信公眾號開發(fā)之設(shè)置自定義菜單實例代碼【java版】

    微信公眾號開發(fā)之設(shè)置自定義菜單實例代碼【java版】

    這篇文章主要介紹了微信公眾號開發(fā)之設(shè)置自定義菜單實例代碼,本實例是為了實現(xiàn)在管理后臺實現(xiàn)微信菜單的添加刪除管理。需要的朋友可以參考下
    2018-06-06
  • 深入淺析SSH的三個組件ssh、sftp、scp

    深入淺析SSH的三個組件ssh、sftp、scp

    SSH 包含3個組件,文中給大家詳細提到。這篇文章主要介紹了SSH的三個組件ssh、sftp、scp ,需要的朋友可以參考下
    2018-10-10
  • SpringMVC---配置與使用的示例

    SpringMVC---配置與使用的示例

    這篇文章主要介紹了SpringMVC---配置與使用的示例,幫助大家更好的理解和學習spring框架,感興趣的朋友可以了解下
    2020-10-10
  • JDK源碼之Vector與HashSet解析

    JDK源碼之Vector與HashSet解析

    HashSet、HashMap、ArrayList、LinkedList、Vector這幾個在Java編程中經(jīng)常用到,他們之間有很多聯(lián)系,有很多相通的地方,我們這次先了解一下Vector與HashSet
    2021-06-06
  • Spring Boot中如何使用斷路器詳解

    Spring Boot中如何使用斷路器詳解

    這篇文章主要給大家介紹了關(guān)于Spring Boot中如何使用斷路器的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2018-08-08
  • Java去重排序之Comparable與Comparator的使用及說明

    Java去重排序之Comparable與Comparator的使用及說明

    這篇文章主要介紹了Java去重排序之Comparable與Comparator的使用及說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • Pattern.compile函數(shù)提取字符串中指定的字符(推薦)

    Pattern.compile函數(shù)提取字符串中指定的字符(推薦)

    這篇文章主要介紹了Pattern.compile函數(shù)提取字符串中指定的字符,使用的是Java中的Pattern.compile函數(shù)來實現(xiàn)對指定字符串的截取,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-12-12

最新評論

庐江县| 洪湖市| 沛县| 紫金县| 陇西县| 孟州市| 五原县| 老河口市| 桐庐县| 化州市| 永登县| 奈曼旗| 安福县| 正镶白旗| 葫芦岛市| 沙坪坝区| 南部县| 祁阳县| 扶绥县| 四川省| 湘潭市| 蓬莱市| 浑源县| 筠连县| 苍山县| 台东县| 恩施市| 三门峡市| 五原县| 临澧县| 弥勒县| 本溪市| 威远县| 禄劝| 南靖县| 仁寿县| 富顺县| 平塘县| 斗六市| 龙岩市| 泉州市|