91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Spring中Bean初始化和銷毀的方法是什么

發布時間:2023-04-17 11:15:46 來源:億速云 閱讀:125 作者:iii 欄目:開發技術

今天小編給大家分享一下Spring中Bean初始化和銷毀的方法是什么的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

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

一、Bean的多種初始化方式

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

1.PostConstruct注解

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

@Configuration
public class TestInitmestond {

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

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

}

2.實現InitializingBean接口

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

@Configuration
public class TestInitmestond {

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

class TestA implements InitializingBean {

    @Override
    public void afterPropertiesSet() throws Exception {
        System.out.println("這是實現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("這是實現InitializingBean的初始化方法");
    }

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

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

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

Spring中Bean初始化和銷毀的方法是什么

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

二、Bean的多種銷毀方式

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

1.PreDestroy注解

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

public class TestDestroyMethod {
    //手動啟動容器,模擬關閉
    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.實現DisposableBean接口

這種就是直接實現接口重寫destroy方法即可

public class TestDestroyMethod {
    //手動啟動容器,模擬關閉
    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("這是實現DisposableBean的方法");
    }
}

3.聲明destroy-method方法

下面是結合了三種銷毀方法的代碼

public class TestDestroyMethod {
    //手動啟動容器,模擬關閉
    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("這是實現DisposableBean的方法");
    }

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

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

Spring中Bean初始化和銷毀的方法是什么

以上就是“Spring中Bean初始化和銷毀的方法是什么”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

永宁县| 罗甸县| 襄城县| 河东区| 静乐县| 沁源县| 大理市| 哈尔滨市| 铜鼓县| 科技| 芦溪县| 措勤县| 喀喇沁旗| 剑川县| 武邑县| 中山市| 冀州市| 河曲县| 巴林左旗| 怀集县| 荃湾区| 彰武县| 休宁县| 宁都县| 中牟县| 临泉县| 甘南县| 锡林郭勒盟| 凉城县| 邯郸市| 永登县| 抚松县| 房产| 石首市| 林甸县| 焉耆| 枣阳市| 江源县| 克拉玛依市| 康定县| 淮北市|