복붙노트

[SPRING] 스프링 컨테이너가 빈의 싱글 톤 인스턴스를 반환하지 않게하려면 어떻게해야합니까?

SPRING

스프링 컨테이너가 빈의 싱글 톤 인스턴스를 반환하지 않게하려면 어떻게해야합니까?

BeanFactory에서 getBean (name)을 호출하면 응용 프로그램 컨텍스트에 정의 된 Bean의 인스턴스가 반환됩니다. 그러나 getBean (name)을 다시 (같은 이름으로) 호출하면 빈의 동일한 인스턴스가 다시 생깁니다. 나는 이것이 어떤 경우에 바람직 할 수 있다는 것을 이해하지만 BeanFactory에게 나에게 새로운 인스턴스를 주도록 어떻게 말합니까?

Spring 구성의 예 (간결하게 ... 일부 자세한 내용은 생략했지만,이 점을 이해해야합니다.) :

<beans>
   <bean id="beanA" class="misc.BeanClass"/>
</beans>

자바 예제 :

for(int i = 0;i++;i<=1) {
    ApplicationContext context = ClassPathXmlApplicationContext("context.xml");
    Object o = context.getBean("beanA");

    System.out.println(o.toString());  // Note: misc.BeanA does not implement 
                                       // toString(), so this will display the OOID
                                       // so that we can tell if it's the same
                                       // instance
}

이걸 실행할 때 나는 다음과 같은 것을 얻는다.

misc.BeanClass@139894
misc.BeanClass@139894

두 인스턴스 모두 동일한 OOID를 가지고 있습니다 ... 그래서 이들은 동일한 인스턴스입니다 ...하지만 나는 다른 인스턴스를 원했습니다.

해결법

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

    1.당신은 봄에 singleton bean이 아닌 prototype bean을 원한다고 말할 필요가있다.

    당신은 봄에 singleton bean이 아닌 prototype bean을 원한다고 말할 필요가있다.

    <bean id="beanA" class="misc.BeanClass" scope="prototype"/>
    

    이렇게하면 각 요청마다 새로운 인스턴스가 생성됩니다.

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

    2.기본 범위는 싱글 톤이지만 프로토 타입, 요청, 세션 또는 글로벌 세션으로 설정할 수 있습니다.

    기본 범위는 싱글 톤이지만 프로토 타입, 요청, 세션 또는 글로벌 세션으로 설정할 수 있습니다.

  3. from https://stackoverflow.com/questions/444623/how-do-i-force-a-spring-container-not-to-return-a-singleton-instance-of-a-bean by cc-by-sa and MIT license