복붙노트

[SPRING] 스프링 빈을 다시 초기화하는 방법은?

SPRING

스프링 빈을 다시 초기화하는 방법은?

런타임에 Spring Bean을 다시 초기화 할 수 있습니까?

My Bean은 경우에 따라 정적 설정을 사용하고 Bean을 다시 초기화해야합니다.

해결법

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

    1.스프링 컨텍스트에서 싱글 톤 빈을 업데이트하는 세 가지 옵션이 있습니다. 사용 사례에 맞는 하나를 선택할 수 있습니다.

    스프링 컨텍스트에서 싱글 톤 빈을 업데이트하는 세 가지 옵션이 있습니다. 사용 사례에 맞는 하나를 선택할 수 있습니다.

    Bean의 재로드 메소드 빈에서 속성을 업데이트 / 다시로드 할 메서드를 만듭니다. 트리거를 기반으로 봄 컨텍스트에서 빈에 액세스 한 다음 reload 메서드를 호출하여 bean 속성을 업데이트합니다 (싱글 톤 이후). 스프링 컨텍스트 및 자동 배선 / 주입되는 모든 곳에서 업데이트됩니다.

    레지스트리에서 빈 삭제 및 등록  DefaultSingletonBeanRegistry를 사용하여 빈을 제거하고 다시 등록 할 수 있습니다. 이것에 대한 유일한 단점은 소비자 클래스에서 이미 autowired / 주입 된 빈의 이전 인스턴스를 새로 고침 / 다시로드하지 않는다는 것입니다.

    DefaultSingletonBeanRegistry registry = (DefaultSingletonBeanRegistry) context.getBeanFactory();
    registry.destroySingleton({yourbean}) //destroys the bean object
    registry.registerSingleton({yourbeanname}, {newbeanobject}) //add to singleton beans cache
    

    @RefreshScope 구성 변경에서 빈 값 등록 정보를 새로 고치는 데 유용합니다. 그러나 그것은 매우 제한적이고 구체적인 목적을 가지고 있습니다. 그것에 관해 더 많은 것을 읽을 리소스.

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

    2.Spring Cloud 의존성을 애플리케이션에 추가하고 bean에 @ConfigurationProperties 및 @RefreshScope 주석을 표시 할 수있다. 그런 다음 endpoint / refresh를 호출하면 빈의 @Value 속성이 다시 초기화됩니다.

    Spring Cloud 의존성을 애플리케이션에 추가하고 bean에 @ConfigurationProperties 및 @RefreshScope 주석을 표시 할 수있다. 그런 다음 endpoint / refresh를 호출하면 빈의 @Value 속성이 다시 초기화됩니다.

  3. from https://stackoverflow.com/questions/51218086/how-to-reinitialize-a-spring-bean by cc-by-sa and MIT license