복붙노트

[SPRING] 봄에 같은 콩을 여러 개 가져 오는 법?

SPRING

봄에 같은 콩을 여러 개 가져 오는 법?

기본적으로 스프링 빈은 싱글 톤입니다. 처리를 위해 동일한 bean의 여러 인스턴스를 얻는 방법이 있는지 궁금합니다.

여기 내가 현재하는 일이있다.

    @Configuration
    public class ApplicationMain { 

     @Value("${service.num: not configured}")
    private int num;

    //more code

@PostConstruct
public void run(){

        for (int i = 0; i < num ; i++) {
                    MyService ser = new MyService(i);
                    Future<?> tasks = executor.submit(ser);
                }

    }
}

다음은 Service 클래스입니다.

    public class MyService implements Runnable {

    private String name;

    public Myservice(int i){

    name=String.ValueOf(i);

    }
  }

여기서 유스 케이스를 단순화했습니다. MyService를 Spring 빈으로 사용하고 위의 for-loop에서 구성 (num)을 기반으로 가능한 한 많이 얻고 싶습니다. 그것이 어떻게 가능한지 궁금해합니다.

감사

해결법

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

    1.먼저 MyService를 Spring bean으로 만들어야한다. @Component로 클래스에 주석을 달아이를 수행 할 수 있습니다. 다음으로, 당신이 말했듯이, 스프링 빈은 기본적으로 싱글 톤이므로, @ Snope ( "prototype") 주석을 하나 더 사용하여 변경할 수 있습니다.

    먼저 MyService를 Spring bean으로 만들어야한다. @Component로 클래스에 주석을 달아이를 수행 할 수 있습니다. 다음으로, 당신이 말했듯이, 스프링 빈은 기본적으로 싱글 톤이므로, @ Snope ( "prototype") 주석을 하나 더 사용하여 변경할 수 있습니다.

    프로토 타입 빈 범위는 Spring에 빈 인스턴스를 요청할 때마다 새로운 인스턴스가 생성된다는 것을 의미합니다. 이는 Autowiring, getBean ()을 사용하여 Bean에 대한 응용 프로그램 컨텍스트를 요청하거나 Bean 팩토리를 사용하는 경우에 적용됩니다.

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

    2.다음은 동일한 유형의 원하는 수의 Bean을 등록하는 간단한 예제입니다.

    다음은 동일한 유형의 원하는 수의 Bean을 등록하는 간단한 예제입니다.

    @Configuration
    public class MultiBeanConfig implements ApplicationContextAware {
    
        @Value("${bean.quantity}")
        private int quantity;
    
        @Override
        public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
            for (int i = 0; i < quantity; i++) {
                ((ConfigurableApplicationContext)applicationContext).getBeanFactory()
                        .registerSingleton("my-service-" + i, new MyService());
            }
            assert(applicationContext.getBeansOfType(MyService.class).size() == quantity);
        }
    
        class MyService {
    
        }
    }
    
  3. from https://stackoverflow.com/questions/42378023/how-to-get-multiple-instances-of-same-bean-in-spring by cc-by-sa and MIT license