1. 程式人生 > >當spring 容器初始化完成後執行某個方法

當spring 容器初始化完成後執行某個方法

在做web專案開發中,尤其是企業級應用開發的時候,往往會在工程啟動的時候做許多的前置檢查。

比如檢查是否使用了我們組禁止使用的Mysql的group_concat函式,如果使用了專案就不能啟動,

並指出哪個檔案的xml檔案使用了這個函式。而在Spring的web專案中,我們可以介入Spring的啟動過程。

我們希望在Spring容器將所有的Bean都初始化完成之後,做一些操作,這個時候我們就可以實現一個介面:

方法一、

1 2 3 4 5 6 7 package com.leadsoft.test.executor.processor
public class InstantiationTracingBeanPostProcessor  implements ApplicationListener<ContextRefreshedEvent> { @Override public void onApplicationEvent(ContextRefreshedEvent event) { //需要執行的邏輯程式碼,當spring容器初始化完成後就會執行該方法。 } }



  同時在Spring的配置檔案中,添加註入:

1 2 <!-- 當Spring容器啟動完成後執行下面的這個Bean --> <bean class="com.leadsoft.test.executor.processor.InstantiationTracingBeanPostProcessor"/>

但是這個時候,會存在一個問題,在web 專案中(spring mvc),系統會存在兩個容器,

一個是root application context ,

另一個就是我們自己的 projectName-servlet context(作為root application context的子容器)。

這種情況下,就會造成onApplicationEvent方法被執行兩次。

為了避免上面提到的問題,我們可以只在root application context初始化完成後呼叫邏輯程式碼,

其他的容器的初始化完成,則不做任何處理,修改後程式碼

如下:

1 2 3 4 5 6 @Override public void onApplicationEvent(ContextRefreshedEvent event) { //root application context 沒有parent,他就是老大.
if(event.getApplicationContext().getParent() == null){ //需要執行的邏輯程式碼,當spring容器初始化完成後就會執行該方法。 } }

方法二、  

其實更簡單的方法是使用註解:`@PostConstruct`,

只需要在需要啟動的時候執行的方法上標註這個註解就搞定了。

註解描述如下:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

相關推薦

spring 容器初始完成執行某個方法

在做web專案開發中,尤其是企業級應用開發的時候,往往會在工程啟動的時候做許多的前置檢查。 比如檢查是否使用了我們組禁止使用的Mysql的group_concat函式,如果使用了專案就不能啟動, 並指出哪個檔案的xml檔案使用了這個函式。而在Spring的

spring 容器初始完成執行某個方法

一下內容來自internet,後面會整理在做web專案開發中,尤其是企業級應用開發的時候,往往會在工程啟動的時候做許多的前置檢查。比如檢查是否使用了我們組禁止使用的MySQL的group_concat函式,如果使用了專案就不能啟動,,在Spring容器將所有的Bean都初始化

最佳實踐--Spring容器初始完成之後執行某個方法

在做javaweb專案的時候,當用戶訪問的時候需要從資料庫載入資料,現在要在容器初始化完成之後直接把資料放入快取,當用戶訪問的時候提高速度。 查閱相關spring文件,找到了一個最佳實踐(best p

Spring容器初始完之後執行某個方法

initializingBean介面是spring提供的,子類要實現afterPropertiesSet()方法,init-method是使用者可以通過屬性檔案配置的。從這裡可以看出實現initializingBean介面是要和spring耦合的,而init-method則不會。但afterProperti

spring context初始完成init自定義bean

我們想在Spring的所有Bean初始化完畢之後執行一些Bean的init操作 如果我們基於Spring開發Application,那麼我們可能的做法就是,在呼叫Spring初始化完畢之後接著去寫我們的程式碼來初始化 如果我們基於Spring開發Web,那麼我們很

Spring容器初始執行某個指定的方法

1.配置springmvc.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://ww

spring容器初始之後執行某些系統初始動作

最近自己所在的專案中出現此種情形:專案啟動後,需要做一些初始化動作,如,讀取配置檔案、查詢資料庫資料存入快取等。參考前人寫的程式碼的實現方式如下: 思路:編寫一個系統初始化類,該類實現ServletContextListenner介面,並實現contextInitializ

spring容器初始bean之後或銷燬bean之前,能做的操作

通過 <bean> 標籤 init-method  初始化bean之後呼叫的方法 destroy-method  銷燬bean之前呼叫的操作方法 <bean id="initQuartzJob" class="com.upinc

Spring容器初始過程

https://blog.csdn.net/xingxing513234072/article/details/78247480 一、Spring 容器高層檢視   Spring 啟動時讀取應用程式提供的Bean配置資訊,並在Spring容器中生成一份相應的Bean配置登錄檔,

Spring/SpringMVC在啟動完成執行方法

或者使用xml配置方式(非註解),簡單配置個bean即可 <bean id="beanDefineConfigue" class="com.creatar.portal.webservice.BeanDefineConfigue"></bean&g

jsp頁面完全載入完成執行一個js函式

    function openTheIndexPage() {             openMyURIWithCid(true, 'root', 'IDX', "iframe/dispatch.jsp?url=tdc/zhk/impctrlobjinf/index/index.jsp", '首頁',

Spring原始碼閱讀】 Spring容器初始流程

文章目錄 refresh方法原始碼 prepareRefresh實現 obtainFreshBeanFactory實現 refreshBeanFactory方法實現 prepareBeanFactory方法實現 invokeBeanFa

Spring容器初始過程都做了哪些事兒

1.ClassPathXmlApplicationContext為入口構造方法中有個refresh()方法用來初始化Spring refresh執行的大致流程: Configurab

spring容器初始時候遇到的死鎖問題

最近啟動spring專案的時候遇到一個死鎖問題,使用jstack獲取執行緒堆疊的時候,可以看到2個執行緒出現了死鎖: DefaultSingletonBeanRegistry.getSinglet

Spring核心探索與總結(二):Spring容器初始原始碼探索

Spring容器概述 容器是spring的核心,Spring容器使用DI管理構成應用的元件,它會建立相互協作的元件之間的關聯,負責建立物件,裝配它們,配置它們並管理它們的生命週期,從生存到死亡(在這裡,可能就是new 到 finalize())。 Sprin

spring容器初始bean的過程中的時間週期

知識點介紹 1、 init-method方法,初始化bean的時候執行,可以針對某個具體的bean進行配置。init-method需要在 applicationContext.xml配置文件中bean的定義裡頭寫明。例如:<bean id="TestBean" cla

mybatis-spring容器初始

1 引言 使用 MyBatis-Spring 模組,我們可以在Spring中使用mybatis,讓Spring容器來管理sqlSessionFactory單例的建立。如以下程式碼 <bean id="sqlSessionFactory" class

Bean都初始完成,實現ApplicationListener介面

web服務啟動spring 後自啟動實現方法: 1) 寫一個類繼承spring的ApplicationListener監聽,並監控ContextRefreshedEvent事件(容易初始化完成事件

Vue.js 關於頁面載入完成執行一個方法的問題

首先我們會想著在mounted或者created裡面加入想要執行的方法,但是有的時候會遇到在你執行這個方法的時候,頁面還並沒有被渲染完成,所以就會出現這個方法在匹配頁面標籤報錯的情況。 解決思路: 1.通過子頁面呼叫父頁面的方法,因為在子頁面開始渲染的時候,你的父頁面肯定

利用Promise實現數據多個請求加載完成執行某個方法

art data 關於 es6 下一個 方法 csdn tails blog 在實際開發中常常有些業務的數據是來自多個接口的,因為ajax是異步,這樣就導致我們需要判斷是否請求到了數據然後在做其他的邏輯,在Promise沒有出現之前,通常我們的解決方法是,第一粗暴的改異步為