我想在加载应用程序上下文后调用方法。我使用了ApplicationListener
接口并实现了onApplicationEvent
。
applicationContext.xml
<beans>
<bean id="loaderContext" class="com.util.Loader" />
<bean id="testServiceHandler" class="com.bofa.crme.deals.rules.handler.TestServiceHandlerImpl">
</beans>
Loader.java
public class Loader implements ApplicationListener {
public void onApplicationEvent(ApplicationEvent event) {
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
TestHandlerServiceImpl test = (TestServiceHandlerImpl)context.getBean("testServiceHandler");
}
}
但上面的代码是递归的。是否可以从onApplicationEvent
函数中的应用程序上下文中获取bean?
答案 0 :(得分:1)
不是在侦听器上创建新的上下文,而是实现接口ApplicationContextAware,将注入您的上下文。
答案 1 :(得分:1)
如果您使用的是Spring 3或更高版本:
从Spring 3.0开始,ApplicationListener一般可以声明 它感兴趣的事件类型。在Spring注册时 ApplicationContext,事件将相应地过滤,用 侦听器仅用于匹配事件对象。
如下所示。另请注意,此解决方案将确保仅在此事件(即启动/加载)上执行:即使您将上下文注入原始类,它也会在我看来为任何事件执行。
public class Loader implements ApplicationListener<ContextStartedEvent> {
public void onApplicationEvent(ContextStartedEvent event) {
ApplicationContext context = event.getApplicationContext();
}
}
请参见此处的示例:
http://www.tutorialspoint.com/spring/event_handling_in_spring.htm