1. 程式人生 > 實用技巧 >ApplicationListener介面,在spring容器初始化後執行的方法

ApplicationListener介面,在spring容器初始化後執行的方法

一、如果我們希望在Spring容器將所有的Bean都初始化完成之後,做一些操作,那麼就可以使用ApplicationListener介面,實現ApplicationListener介面中的onApplicationEvent方法,此方法會在容器中所有bean初始化完成後執行。

@Component
public class MyApplicationListener implements ApplicationListener<ContextRefreshedEvent> {
    @Autowired
    private ApplicationContext applicationContext;

    @Override
    
public void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent) { System.out.println("容器初始化完成。。。。。。。。"); } }

二、在web開發中,會存在一個問題,系統會存在兩個容器,一個是spring的ioc容器(父),一個是springmvc的ioc容器(子),這兩個容器是父子關係。這樣就會造成onApplicationEvent方法被執行兩次。為了解決此問題,我們可以判斷當前容器是否父容器,是父容器才執行下邊的程式碼。步驟如下:通過引數contextRefreshedEvent獲取容器物件,在根據容器物件獲取其父容器,如果父容器為空,則說明當前容器是父容器。

@Component
public class MyApplicationListener implements ApplicationListener<ContextRefreshedEvent> {
    @Autowired
    private ApplicationContext applicationContext;

    @Override
    public void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent) {
        ApplicationContext parent 
= contextRefreshedEvent.getApplicationContext().getParent(); if (parent == null){ System.out.println("容器初始化完成。。。。。。。。"); } } }