Spring 弹簧应用上下文加载挂钩

Spring 弹簧应用上下文加载挂钩,spring,Spring,Spring应用程序上下文加载过程中是否有挂钩 我想在加载应用程序上下文之前(在实例化任何bean/properties/aspects/etc…之前)运行一段代码 提前感谢也许能满足您的需要?它们在读取整个XML配置文件之后,但在实例化任何(其他)bean之前运行。您还可以使用来接收事件通知,如ContextClosedEvent、ContextStartedEvent或ContextStoppedEvent 更多信息请参见本章。我刚刚声明了我自己的ContextLoaderListener,

Spring应用程序上下文加载过程中是否有挂钩

我想在加载应用程序上下文之前(在实例化任何bean/properties/aspects/etc…之前)运行一段代码

提前感谢

也许能满足您的需要?它们在读取整个XML配置文件之后,但在实例化任何(其他)bean之前运行。

您还可以使用来接收事件通知,如ContextClosedEvent、ContextStartedEvent或ContextStoppedEvent


更多信息请参见本章。

我刚刚声明了我自己的
ContextLoaderListener
,以便在加载Spring上下文之前执行所需的工作。它适用于web应用程序,只需在Spring上下文侦听器之前声明:

公共类MyServletContextListener实现ServletContextListener{
@凌驾
公共无效上下文已销毁(ServletContextEvent arg0){
}
@凌驾
公共void contextInitialized(ServletContextEvent arg0){
//在这里表演你的作品
}
}

com.myCompany.listeners.MyServletContextListener
org.springframework.web.context.ContextLoaderListener

我不认为
ApplicationListeners
在上下文启动之前得到通知,似乎没有相应的事件。从ContextRefreshedEvent JavaDoc中可以看出:“当ApplicationContext初始化或刷新时引发的事件。”今晚我将检查事件是否在初始化之前或之后发送。我尝试侦听ContextStartedEvent,但上下文的默认生命周期似乎没有明确调用start方法,因此事件不会发布。默认情况下,生命周期只是指整个web服务器和上下文的启动(我希望触发ContextStartedEvent)。知道这是为什么吗?是的,我同时也弄明白了,但让我困惑的是,为什么上下文在初始化时没有得到刷新。在我看来,由于ContextRefreshedEvent被多次触发,因此它不是您可以依赖的,因此ContextStartedEvent看起来是唯一有效的替代方案。我希望在初始化时触发该调用,如果唯一的方法是在init上显式调用:configurableApplicationContext.start(),那么该调用应该在那里。所以我想现在的问题是——为什么不是呢?