Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring递归加载应用程序上下文_Java_Spring_Spring Ioc - Fatal编程技术网

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

Java Spring递归加载应用程序上下文,java,spring,spring-ioc,Java,Spring,Spring Ioc,我想在加载应用程序上下文后调用一个方法。我使用了ApplicationListener接口,并在ApplicationEvent上实现了 applicationContext.xml <beans> <bean id="loaderContext" class="com.util.Loader" /> <bean id="testServiceHandler" class="com.bofa.crme.deals.rules.handler.Tes

我想在加载应用程序上下文后调用一个方法。我使用了
ApplicationListener
接口,并在ApplicationEvent上实现了

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"); 
   }
}
applicationContext.xml
Loader.java
公共类加载器实现ApplicationListener{
ApplicationEvent上的公共无效(ApplicationEvent事件){
ApplicationContext context=new ClassPathXmlApplicationContext(“ApplicationContext.xml”);
TestHandlerServiceImpl test=(TestServiceHandlerImpl)context.getBean(“testServiceHandler”);
}
}

但是上面的代码是递归的。是否可以从ApplicationEvent函数中的应用程序上下文中获取bean?

实现接口,而不是在侦听器上创建新上下文,您的上下文将被注入。

如果您使用的是Spring 3或更高版本:

从Spring3.0开始,ApplicationListener可以一般地声明 它感兴趣的事件类型。当向Spring注册时 ApplicationContext,事件将被相应地过滤,其中 仅为匹配事件对象调用侦听器

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

public class Loader implements ApplicationListener<ContextStartedEvent> {

   public void onApplicationEvent(ContextStartedEvent event) {
         ApplicationContext context = event.getApplicationContext(); 
   }
}
公共类加载器实现ApplicationListener{
ApplicationEvent(ContextStartedEvent事件)上的公共无效{
ApplicationContext context=event.getApplicationContext();
}
}
请参见此处的示例:


您正在重新加载应用程序上下文;不知道你会期待什么。让它了解上下文或其他内容。你应该看看: