Spring递归加载应用程序上下文

3

我希望在应用程序上下文加载后调用一个方法。我使用了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?


你正在重新加载应用上下文;不确定你期望什么。让它变成上下文感知或者其他什么方式。 - Dave Newton
你应该看一下:https://dev59.com/mnNA5IYBdhLWcg3wHp6B - yunandtidus
2个回答

1
如果您正在使用Spring 3或更高版本:
从Spring 3.0开始,ApplicationListener可以通用地声明它感兴趣的事件类型。当在Spring ApplicationContext中注册时,事件将被相应地过滤,仅匹配事件对象的监听器将被调用。

http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/context/ApplicationListener.html#onApplicationEvent-E-

它将看起来像下面这样。还要注意,此解决方案将确保仅在此事件(即启动/加载)上执行:我认为,即使您将上下文注入到原始类中,它也将在任何事件上执行。

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


1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接