【问题标题】:Spring recursively loading application contextSpring递归加载应用程序上下文
【发布时间】:2023-04-09 12:17:01
【问题描述】:

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

【问题讨论】:

标签: java spring spring-ioc


【解决方案1】:

不要在监听器上创建新的上下文,而是实现接口ApplicationContextAware,你的上下文将被注入。

【讨论】:

    【解决方案2】:

    如果您使用的是 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-19
      • 2019-06-16
      • 2014-08-18
      • 1970-01-01
      相关资源
      最近更新 更多