복붙노트

[SPRING] Spring에서 런타임시 빈을 동적으로 선언한다.

SPRING

Spring에서 런타임시 빈을 동적으로 선언한다.

다음과 같은 것이 가능한지 궁금합니다. 테스트 목적으로, 다른 테스트를 위해 어플리케이션 컨텍스트에서 다른 모의 클래스를 선언하고 싶습니다. Jersey REST 클라이언트를 사용하는 수락 테스트입니다. 런타임시 빈을 동적으로 선언하는 방법이 있습니까? Spring은 컨텍스트가로드 된 후 응용 프로그램 컨텍스트를 변경할 수있는 API를 가지고 있습니까?

해결법

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

    1.응용 프로그램 컨텍스트에서 다른 Bean을 사용하는 일반적인 방법은 프로파일을 사용하는 것입니다. 다음 스프링 소스 게시물에서 프로파일에 대해 읽을 수 있습니다.

    응용 프로그램 컨텍스트에서 다른 Bean을 사용하는 일반적인 방법은 프로파일을 사용하는 것입니다. 다음 스프링 소스 게시물에서 프로파일에 대해 읽을 수 있습니다.

    첫 번째 질문에 대해서는 런타임시 BeanDefinitionRegistry.registerBeanDefinition () 메소드를 통해 Bean을 선언 할 수 있습니다. 예를 들면 다음과 같습니다.

      BeanDefinitionBuilder builder = BeanDefinitionBuilder.rootBeanDefinition(SomeClass.class);
      builder.addPropertyReference("propertyName", "someBean");  // add dependency to other bean
      builder.addPropertyValue("propertyName", someValue);      // set property value
      DefaultListableBeanFactory factory = (DefaultListableBeanFactory) context.getBeanFactory();
      factory.registerBeanDefinition("beanName", builder.getBeanDefinition());
    

    이미 구성된 singleton bean 인스턴스를 등록하는 것도 가능하다.

    context.getBeanFactory().registerSingleton(beanName, singletonObject)
    

    마지막으로 Spring은 컨텍스트를 새로 고친 후에 빈을 변경하는 명확한 방법을 제공하지 않지만 가장 일반적인 방법은 다음과 같습니다.

  2. from https://stackoverflow.com/questions/15328904/dynamically-declare-beans-at-runtime-in-spring by cc-by-sa and MIT license