복붙노트

[SPRING] Spring 빈 컨테이너 <import> 명령이 중복 컨테이너를 제거합니까?

SPRING

Spring 빈 컨테이너 명령이 중복 컨테이너를 제거합니까?

Spring 빈 컨테이너의 명령은 중복 컨테이너를 제거합니까? 예를 들어, 빈 컨테이너 파일 A가 B와 C를 임포트하고 각각이 D를 임포트하면, 스프링은 중복 D 컨테이너를 제거하거나 무시합니까?

해결법

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

    1.중복 된 "컨테이너"는 제거하지 않지만 중복 된 bean 정의를 제거합니다. 따라서 D에있는 빈은 생성 된 빈 팩토리에서 한 번만 생성됩니다. 당신은 그것에 대해 경고가 가득 찬 얼굴을 갖게 될 것입니다.

    중복 된 "컨테이너"는 제거하지 않지만 중복 된 bean 정의를 제거합니다. 따라서 D에있는 빈은 생성 된 빈 팩토리에서 한 번만 생성됩니다. 당신은 그것에 대해 경고가 가득 찬 얼굴을 갖게 될 것입니다.

    그것은 가장 피해야 할 것이 있습니다. 같은 ID를 가진 하나의 bean 정의는 그 bean의 유형과 특성이 같은지 여부에 관계없이 해당 bean 정의를 "숨 깁니다". 어느 쪽이 "숨겨 지는지"는 선언 순서에 달려 있습니다. 그것은 위험하기 때문에 스프링이 경고합니다.

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

    2.스카프 만의 답을 확인하기 위해 GitHub에서 예제 프로젝트 봄 컨텍스트 가져 오기를 만들었습니다.

    스카프 만의 답을 확인하기 위해 GitHub에서 예제 프로젝트 봄 컨텍스트 가져 오기를 만들었습니다.

    $ mvn test
    .
    .
    .
    -------------------------------------------------------
     T E S T S
    -------------------------------------------------------
    Running ca.derekmahar.example.springContextImport.SpringContextImportTest
    2011-03-15 16:25:44,980 545  [main] INFO  o.springframework.test.context.TestContextManager - @TestExecutionListeners is not present for class [class ca.derekmahar.example.springContextImport.SpringContextImportTest]: using defaults.
    2011-03-15 16:25:45,240 805  [main] INFO  o.s.beans.factory.xml.XmlBeanDefinitionReader - Loading XML bean definitions from class path resource [spring-application-context.xml]
    2011-03-15 16:25:45,417 982  [main] INFO  o.s.beans.factory.xml.XmlBeanDefinitionReader - Loading XML bean definitions from class path resource [spring-application-context-a.xml]
    2011-03-15 16:25:45,459 1024 [main] INFO  o.s.beans.factory.xml.XmlBeanDefinitionReader - Loading XML bean definitions from class path resource [spring-application-context-b.xml]
    2011-03-15 16:25:45,484 1049 [main] INFO  o.s.beans.factory.xml.XmlBeanDefinitionReader - Loading XML bean definitions from class path resource [spring-application-context-d.xml]
    2011-03-15 16:25:45,551 1116 [main] INFO  o.s.beans.factory.xml.XmlBeanDefinitionReader - Loading XML bean definitions from class path resource [spring-application-context-c.xml]
    2011-03-15 16:25:45,585 1150 [main] INFO  o.s.beans.factory.xml.XmlBeanDefinitionReader - Loading XML bean definitions from class path resource [spring-application-context-d.xml]
    2011-03-15 16:25:45,610 1175 [main] INFO  o.s.b.factory.support.DefaultListableBeanFactory - Overriding bean definition for bean 'd': replacing [Generic bean: class [ca.derekmahar.example.springContextImport.bean.D]; scope=; abstract=false; lazyInit=false; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=null; destroyMethodName=null; defined in class path resource [spring-application-context-d.xml]] with [Generic bean: class [ca.derekmahar.example.springContextImport.bean.D]; scope=; abstract=false; lazyInit=false; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=null; destroyMethodName=null; defined in class path resource [spring-application-context-d.xml]]
    2011-03-15 16:25:45,652 1217 [main] INFO  o.s.context.support.GenericApplicationContext - Refreshing org.springframework.context.support.GenericApplicationContext@105738: startup date [Tue Mar 15 16:25:45 EDT 2011]; root of context hierarchy
    2011-03-15 16:25:45,895 1460 [main] INFO  o.s.b.factory.support.DefaultListableBeanFactory - Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@18825b3: defining beans [d,b,c,a,org.springframework.context.annotation.internalConfigurationAnnotationProcessor,org.springframework.context.annotation.internalAutowiredAnnotationProcessor,org.springframework.context.annotation.internalRequiredAnnotationProcessor,org.springframework.context.annotation.internalCommonAnnotationProcessor]; root of factory hierarchy
    2011-03-15 16:25:45,895 1460 [main] INFO  ca.derekmahar.example.springContextImport.bean.C - Created D
    2011-03-15 16:25:45,979 1544 [main] INFO  ca.derekmahar.example.springContextImport.bean.B - Created B
    2011-03-15 16:25:45,996 1561 [main] INFO  ca.derekmahar.example.springContextImport.bean.C - Created C
    2011-03-15 16:25:46,005 1570 [main] INFO  ca.derekmahar.example.springContextImport.bean.A - Created A
    2011-03-15 16:25:46,038 1603 [main] INFO  ca.derekmahar.example.springContextImport.bean.A - Running A
    2011-03-15 16:25:46,038 1603 [main] INFO  ca.derekmahar.example.springContextImport.bean.B - Running B
    2011-03-15 16:25:46,038 1603 [main] INFO  ca.derekmahar.example.springContextImport.bean.C - Running D
    2011-03-15 16:25:46,038 1603 [main] INFO  ca.derekmahar.example.springContextImport.bean.C - Running C
    2011-03-15 16:25:46,038 1603 [main] INFO  ca.derekmahar.example.springContextImport.bean.C - Running D
    Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.846 sec
    

    스카프맨이 예측 한대로 "d '에 플래그를 지정하는"bean'd "에 대한"Overriding bean definition "메시지에 주목하십시오.

  3. from https://stackoverflow.com/questions/5302980/does-the-spring-bean-container-import-command-eliminate-duplicate-containers by cc-by-sa and MIT license