복붙노트

[SPRING] 모든 SpringBeans와 ApplicationContext가 초기화 된 후에 메소드 호출하기

SPRING

모든 SpringBeans와 ApplicationContext가 초기화 된 후에 메소드 호출하기

Web ApplicationContext 및 SpringBeans가 초기화 된 직후에 호출되어야하는 복잡한 Java 프로그램에 메소드가 있습니다.

나는 주변에서 놀아 보려고 노력했다. 이 메소드는 applicationContext.get (). getBean (beanId)를 호출합니다. 방법.

나는 이것을하는 방법을 아는 사람이 있는지 궁금 해서요.

고맙습니다.

해결법

  1. ==============================

    1.ApplicationListener로 ContextRefreshedEvent를 잡을 수 있습니다.

    ApplicationListener로 ContextRefreshedEvent를 잡을 수 있습니다.

  2. ==============================

    2.Spring 4.2 이후에는 주석을 사용하여 Spring Lifecycle 이벤트 (및 자신의 이벤트)에 이벤트 리스너를 연결할 수 있습니다. 단순한 @EventListener를 메소드에 추가하고 첫 번째 (그리고 유일한) 매개 변수로 이벤트 유형을 포함 시키면 Spring은 자동으로 이벤트 유형을 감지하고 연결합니다.

    Spring 4.2 이후에는 주석을 사용하여 Spring Lifecycle 이벤트 (및 자신의 이벤트)에 이벤트 리스너를 연결할 수 있습니다. 단순한 @EventListener를 메소드에 추가하고 첫 번째 (그리고 유일한) 매개 변수로 이벤트 유형을 포함 시키면 Spring은 자동으로 이벤트 유형을 감지하고 연결합니다.

    https://spring.io/blog/2015/02/11/better-application-events-in-spring-framework-4-2

    @Component
    public class MyListener {
    
        @EventListener
        public void handleContextRefresh(ContextRefreshedEvent event) {
            ...
        }
    }
    
  3. ==============================

    3.이 목적으로 ApplicationListener 를 사용할 수 있습니다. 제네릭 형식 매개 변수에서는 ContextRefreshedEvent를 사용할 수 있습니다. ApplicationEvent에 대한 재정의 된 메소드에서 bean을 autowire하거나 서비스로 사용하거나 여기에서 다른 서비스를 호출하는 것과 같은 작업을 수행 할 수 있습니다. 그리고 @PostConstructor와는 다른 점에 주목하십시오.

    이 목적으로 ApplicationListener 를 사용할 수 있습니다. 제네릭 형식 매개 변수에서는 ContextRefreshedEvent를 사용할 수 있습니다. ApplicationEvent에 대한 재정의 된 메소드에서 bean을 autowire하거나 서비스로 사용하거나 여기에서 다른 서비스를 호출하는 것과 같은 작업을 수행 할 수 있습니다. 그리고 @PostConstructor와는 다른 점에 주목하십시오.

    public class MyContextRefreshListener implements ApplicationListener<ContextRefreshedEvent> {
    
        @Override
        public void onApplicationEvent(ContextRefreshedEvent event) {
            //do what you want
        }
    }
    
  4. ==============================

    4.해당 빈에 대한 액세스 권한이있는 사용자 정의 BeanFactoryPostProcessor를 추가 할 수 있습니다.

    해당 빈에 대한 액세스 권한이있는 사용자 정의 BeanFactoryPostProcessor를 추가 할 수 있습니다.

  5. from https://stackoverflow.com/questions/3409605/calling-a-method-after-all-springbeans-and-applicationcontext-have-been-initiali by cc-by-sa and MIT license