2014-12-19 5 views
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? пожалуйста, помогите мне.

+0

Вы загружая контекст приложения снова; не уверен, чего вы ожидаете. Сделайте это контекстно-зависимым или что-то еще. –

+0

Вы должны взглянуть на: http://stackoverflow.com/questions/1088550/spring-how-to-call-a-method-after-bean-initialization-is-complete – yunandtidus

ответ

1

Вместо того, чтобы создавать новый контекст на слушателе, реализуйте интерфейс ApplicationContextAware, ваш контекст будет введен.

1

Если вы используете Spring 3 или выше:.

С весны 3.0 ApplicationListener можно обобщенно объявить тип случае, если он заинтересован в Зарегистрировавшись с Spring ApplicationContext, события будут соответственно, с помощью прослушивателя , вызываемого только для сопоставления объектов событий.

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

, который будет выглядеть следующим образом. Также обратите внимание, что это решение гарантирует, что оно будет выполнено только на этом событии (например, start/load): оно выглядит так, как если бы вы ввели контекст в ваш исходный класс, он будет выполнен для любого события.

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

Смежные вопросы