[SPRING] 서버 시작 및 완전히로드 된 모든 스프링 빈에 대한 리스너
SPRING서버 시작 및 완전히로드 된 모든 스프링 빈에 대한 리스너
내 웹 응용 프로그램에서 Listener를 만들어서 서버가 시작되고 모든 Bean이로드 될 때 알림을 받으려고합니다. 그 Listener에서 서비스 메소드를 호출하려고합니다. 나는 ServletContextListener를 사용했다. 그것은 contextInitialized 메서드가 있지만 내 경우에는 작동하지 않습니다. 그것은 서버가 시작될 때 스프링 콩 생성 이전에 얽매이지 않습니다. 그래서 서비스 클래스의 인스턴스를 null로 가져옵니다. 리스너를 만드는 다른 방법이 있습니까?
해결법
-
==============================
1.Spring 컨텍스트 설정에서 ApplicationListener의 인스턴스를 등록하기 위해 갈 것입니다. ContextRefreshedEvent는 애플리케이션 컨텍스트가 초기화되거나 새로 고쳐질 때 신호를받습니다. 이 순간 이후에 당신은 당신의 서비스를 부를 수 있습니다.
Spring 컨텍스트 설정에서 ApplicationListener의 인스턴스를 등록하기 위해 갈 것입니다. ContextRefreshedEvent는 애플리케이션 컨텍스트가 초기화되거나 새로 고쳐질 때 신호를받습니다. 이 순간 이후에 당신은 당신의 서비스를 부를 수 있습니다.
아래에는 ApplicationListener 구현 (서비스에 따라 다름)과이를 구현하는 데 필요한 Spring 구성 (Java 및 XML 모두)이 나와 있습니다. 앱과 관련된 구성을 선택해야합니다.
Java 기반 구성
@Configuration public class JavaConfig { @Bean public ApplicationListener<ContextRefreshedEvent> contextInitFinishListener() { return new ContextInitFinishListener(myService()); } @Bean public MyService myService() { return new MyService(); } }
XML
<bean class="com.package.ContextInitFinishListener"> <constructor-arg> <bean class="com.package.MyService"/> </constructor-arg> </bean>
다음은 ContextInitFinishListener 클래스의 코드입니다.
import org.springframework.context.ApplicationListener; import org.springframework.context.event.ContextRefreshedEvent; public class ContextInitFinishListener implements ApplicationListener<ContextRefreshedEvent> { private MyService myService; public ContextInitFinishListener(MyService myService) { this.myService = myService; } @Override public void onApplicationEvent(ContextRefreshedEvent event) { //call myService } }
-
==============================
2.Spring의 이벤트 핸들링을 사용할 수있다. 찾고있는 이벤트는 아마도 ContextRefreshedEvent입니다.
Spring의 이벤트 핸들링을 사용할 수있다. 찾고있는 이벤트는 아마도 ContextRefreshedEvent입니다.
-
==============================
3.예, app.xml을로드하는 동안 다른 Spring 컨텍스트 XML 파일을로드하려는 경우에만 web.xml에 ContextLoaderListener를 추가해야합니다.
예, app.xml을로드하는 동안 다른 Spring 컨텍스트 XML 파일을로드하려는 경우에만 web.xml에 ContextLoaderListener를 추가해야합니다.
<context-param> <param-name>contextConfigLocation</param-name> <param-value> /WEB-INF/spring-security.xml </param-value> </context-param>
이 링크를 방문하면 더 많은 도움을받을 수 있습니다.
여기를 클릭하십시오.
from https://stackoverflow.com/questions/23054452/listener-for-server-starup-and-all-spring-bean-loaded-completely by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] @RequestBody를 사용하여 JSON을 Enum 유형으로 변환 (0) | 2019.05.13 |
---|---|
[SPRING] 런타임시 @Value로 주석 된 업데이트 필드 (0) | 2019.05.13 |
[SPRING] JPA 대 플러시 대 커밋 (0) | 2019.05.13 |
[SPRING] Spring Framework jar 파일을 다운로드 할 수 없음 (0) | 2019.05.13 |
[SPRING] Mockito의 Spy object from Spring (0) | 2019.05.12 |