Spring容器初始化完之後執行某個方法
下面是一個小例子,initializingBean介面和init-method都實現了,可以自己隨便改。
試驗用的bean:
package researchspring.beanfactory;
import org.springframework.beans.factory.InitializingBean;
public class LifeCycleBean implements InitializingBean{
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void afterPropertiesSet() throws Exception {
System.out.println("Implements initializing start.....");
if(name == null)
System.out.println("configuration failed!");
System.out.println("Implements initializing end!");
}
public void init() {
System.out.println("init() initializing start.....");
if(name == null)
System.out.println("configuration failed!");
System.out.println("init() initializing end!");
}
}
applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
<bean id="lifeBean" class="researchspring.beanfactory.LifeCycleBean"
init-method="init" >
<property name="name" value="apple"></property>
</bean>
</beans>
測試類:
public class Test {
public static void main(String[] args) {
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
LifeCycleBean lifeBean = (LifeCycleBean)ac.getBean("lifeBean");
}
}
×××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××
另外,從網上找了這麼一段
org.springframework.beans.factory.support. AbstractAutowireCapableBeanFactory完成一個Bean初始化方法的呼叫工作。 AbstractAutowireCapableBeanFactory是XmlBeanFactory的超類,再 AbstractAutowireCapableBeanFactory的invokeInitMethods方法中實現呼叫一個Bean初始化方法: org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.java:
//…… //在一個bean的合作者裝置完成後,執行一個bean的初始化方法。 protectedvoid invokeInitMethods(String beanName, Object bean, RootBeanDefinition mergedBeanDefinition) throws Throwable { //判斷bean是否實現了InitializingBean介面 if (bean instanceof InitializingBean) { if (logger.isDebugEnabled()) { logger.debug("Invoking afterPropertiesSet() on bean with name '"+ beanName +"'"); } //呼叫afterPropertiesSet方法 ((InitializingBean) bean).afterPropertiesSet(); } //判斷bean是否定義了init-method if(mergedBeanDefinition!=null&&mergedBeanDefinition.getInitMethodName() !=null) { //呼叫invokeCustomInitMethod方法來執行init-method定義的方法 invokeCustomInitMethod(beanName, bean, mergedBeanDefinition.getInitMethodName()); } } //執行一個bean定義的init-method方法 protectedvoid invokeCustomInitMethod(String beanName, Object bean, String initMethodName) throws Throwable { if (logger.isDebugEnabled()) { logger.debug("Invoking custom init method '"+ initMethodName +"' on bean with name '"+ beanName +"'"); } //使用方法名,反射Method物件 Method initMethod = BeanUtils.findMethod(bean.getClass(), initMethodName, null); if (initMethod ==null) { thrownew NoSuchMethodException( "Couldn't find an init method named '"+ initMethodName +"' on bean with name '"+ beanName +"'"); } //判斷方法是否是public if (!Modifier.isPublic(initMethod.getModifiers())) { //設定accessible為true,可以訪問private方法。 initMethod.setAccessible(true); } try { //反射執行這個方法 initMethod.invoke(bean, (Object[]) null); } catch (InvocationTargetException ex) { throw ex.getTargetException(); } } //………..
相關推薦
Spring容器初始化完之後執行某個方法
initializingBean介面是spring提供的,子類要實現afterPropertiesSet()方法,init-method是使用者可以通過屬性檔案配置的。從這裡可以看出實現initializingBean介面是要和spring耦合的,而init-method則不會。但afterProperti
最佳實踐--Spring容器初始化完成之後執行某個方法
在做javaweb專案的時候,當用戶訪問的時候需要從資料庫載入資料,現在要在容器初始化完成之後直接把資料放入快取,當用戶訪問的時候提高速度。 查閱相關spring文件,找到了一個最佳實踐(best p
spring 容器初始化完成後執行某個方法
一下內容來自internet,後面會整理在做web專案開發中,尤其是企業級應用開發的時候,往往會在工程啟動的時候做許多的前置檢查。比如檢查是否使用了我們組禁止使用的MySQL的group_concat函式,如果使用了專案就不能啟動,,在Spring容器將所有的Bean都初始化
當spring 容器初始化完成後執行某個方法
在做web專案開發中,尤其是企業級應用開發的時候,往往會在工程啟動的時候做許多的前置檢查。 比如檢查是否使用了我們組禁止使用的Mysql的group_concat函式,如果使用了專案就不能啟動, 並指出哪個檔案的xml檔案使用了這個函式。而在Spring的
spring容器初始化bean之後或銷燬bean之前,能做的操作
通過 <bean> 標籤 init-method 初始化bean之後呼叫的方法 destroy-method 銷燬bean之前呼叫的操作方法 <bean id="initQuartzJob" class="com.upinc
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容器初始化過程
https://blog.csdn.net/xingxing513234072/article/details/78247480 一、Spring 容器高層檢視 Spring 啟動時讀取應用程式提供的Bean配置資訊,並在Spring容器中生成一份相應的Bean配置登錄檔,
【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
Spring Bean初始化之後/銷燬之前執行指定方法
關於在spring 容器初始化 bean 和銷燬前所做的操作定義方式有三種: 通過@PostConstruct 和 @PreDestroy 方法 實現初始化和銷燬bean之前進行的操作 通過 在xml中定義init-method 和 destory-metho
SpringIOC容器初始化之後,和銷燬之前幾種方法的執行順序
1.搭建一個簡單的Spring環境 2.定義一個介面及其實現類 package com.roger.service; public interface SpringLifeCycleService { void springLifeCycle(); } package co
Spring Bean初始化之後執行指定方法
轉載:https://blog.csdn.net/forever7107/article/details/76446544 常用的設定方式有以下三種: 通過實現 InitializingBean/DisposableBean 介面來定製初始化之後/銷燬之前的操作方法; 通過 <bean&g
spring boot容器加載完後執行特定操作
文件中 code buck 線程 private tor tope gets send 有時候我們需要在spring boot容器啟動並加載完後,開一些線程或者一些程序來幹某些事情。這時候我們需要配置ContextRefreshedEvent事件來實現我們要做的事情
Spring源碼分析總結(一)-IOC容器初始化
Spring源碼分析總結一、IOC容器的初始化過程 IOC容器的初始化是由refresh()方法啟動。經常使用的ApplicationContext 有:ClassPathXmlApplicationContext和FileSystemXmlApplicationContext、XmlWebApp
03.Spring IoC 容器 - 初始化
itl ret num servlet fontsize eat 圖片 number sources 基本概念 Spring IoC 容器的初始化過程在監聽器 ContextLoaderListener 類中定義。 具體由該類的的 configureAndRefreshWe