2011-03-14 12 views
11

¿El comando <import> del Springbean container elimina los contenedores duplicados? Por ejemplo, si el archivo A del contenedor de frijoles importa B y C y cada uno de estos a su vez importa D, ¿Spring elimina o ignora el contenedor D duplicado?¿El comando Contenedor de grano de primavera <import> elimina los contenedores duplicados?

+0

Supongo que los frijoles están almacenados en caché en algún tipo de mapa por su id de frijol (por lo que solo habría un frijol por cada id de frijol), pero esperaré a que alguien lo confirme. – ninjalj

+0

La solicitud de función para votar: https://jira.springsource.org/browse/SPR-9526 – Vadzim

Respuesta

12

No elimina los "contenedores" duplicados, pero eliminará las definiciones de beans duplicados. Por lo tanto, los granos en D solo se crearán una vez en la fábrica de beans resultante. Sin embargo, tendrá una cara llena de advertencias al respecto.

Es algo que es mejor evitar. Una definición de bean que tenga la misma ID que otra "ocultará" la definición de bean, independientemente de si el tipo y las propiedades de ese bean son iguales o no. Cuál se "oculta" depende del orden de la declaración. Es peligroso, así que Spring te avisará al respecto.

3

creé ejemplo de proyecto spring-context-import en GitHub confirmar de answer skaffman:

$ 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 [email protected]5738: 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.s[email protected]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 

Como skaffman predijo, observe la "definición de frijol overiding de frijol 'd'" mensaje de los cuales banderas del grano duplicado "d".

Cuestiones relacionadas