..


Enlaces patrocinados

Contenedores Core - Constructor inyección de dependencia

Ahora vamos a ver, por ejemplo, cómo usar la inyección de dependencia Constructor
Creamos nuestro grano que depende de un servicio genérico:






 it.mrwebmaster.di.constructor paquete;









 pública haba clase {





  



 GenericService GenericService privado;



	

  



 beanName cadena privada;





  



 / **



   



 * Fabricante



   



 * @ Param GenericService



   



 * @ Param beanName



   



 * /



  



 pública Bean (GenericService GenericService, String beanName) {



    



 super ();



    



 this.genericService = GenericService;



    



 this.beanName = beanName;



  



 }



	

  



 / **



   



 * Método público



   



 * /



  



 doit public void () {



    



 System.out.println (beanName + "hacer algo");



    



 genericService.dosomething ();



  



 }



	





 }



configurar la dependencia nell'applicationContext. xml





 <bean id="genericService" class="it.mrwebmaster.di.constructor.GenericServiceImpl" scope="singleton" />









 <bean id="constructorBean" class="it.mrwebmaster.di.constructor.bean">



  



 <constructor-arg value="beanName"/>



  



 <constructor-arg ref="genericService"/>







 </ Bean>



Como puede verse en el ejemplo de usar la inyección de dependencia Constructor debe utilizar el constructor-arg etiqueta con el árbitro o los atributos de valor. El Attibassi ref necesidad de pasar por arg ya instancia nell'IoC otro recipiente de café, mientras que el valor del atributo se utiliza para pasar los valores por defecto en forma de cadenas o números.

En el ejemplo el constructor de la clase acepta como entrada un grano GenericService y una cadena, pero el ejemplo que quería invertir el orden de los argumentos para demostrar cómo la combinación de primavera de los argumentos de su tipo.
Este tipo de comportamiento está muy bien cuando todos los argumentos son de diferentes tipos, pero ¿cómo podemos especificar el orden si los argumentos son del mismo tipo? El constructor-arg etiqueta proporciona el atributo de índice que indica el orden en la primavera con la que pasar parámetros.






 <bean id="constructorBean" class="it.mrwebmaster.di.constructor.bean">



  



 <constructor-arg value="beanName" index="1" />



  



 <constructor-arg ref="genericService" index="0" />







 </ Bean>



Otro caso podría ser un un ambiguo en el que el construttore acepta como entrada dos parámetros que pueden ser ambas representadas por una cadena, por ejemplo:






 pública Bean (GenericService GenericService, String beanName, invocationTimes entero) {



  



 super ();



  



 this.genericService = GenericService;



  



 this.beanName = beanName;



  



 this.invocationTimes = invocationTimes;







 }



y nell'applicationContext. xml





 <bean id="constructorBean2" class="it.mrwebmaster.di.constructor.bean">



  



 <constructor-arg value="0" />



  



 <constructor-arg value="beanName" />



  



 <constructor-arg ref="genericService" />







 </ Bean>



En este caso, procedió de error "0" puede ser una cadena o un número. Para resolver este problema, utilice el índice o attriburo el tipo de atributo de esta manera:





 <bean id="constructorBean2" class="it.mrwebmaster.di.constructor.bean">



  



 <constructor-arg type="java.lang.Integer" value="0" />



  



 <constructor-arg value="beanName" type="java.lang.String" />



  



 <constructor-arg ref="genericService" />







 </ Bean>



El atributo constructor-arg también se puede utilizar para pasar parámetros al método de fábrica:






 estáticos públicos createBean frijol (GenericService GenericService, String beanName, invocationTimes entero) {



  



 Frijol b = new Bean (GenericService, beanName, invocationTimes);



  



 / / No somethig .......



  



 b retorno;







 }



nell'applicationContext. xml





 <bean id="constructorBean3" class="it.mrwebmaster.di.constructor.bean" factory-method="createBean">



  



 <constructor-arg type="java.lang.Integer" value="0" />



  



 <constructor-arg value="beanName" type="java.lang.String" />



  



 <constructor-arg ref="genericService" />







 </ Bean>



Primavera Guía Java
E-Learning
Linux (Curso) Linux (Curso)
Guía completa de código abierto del sistema. A partir de 49 €.
PHP (Curso) PHP (Curso)
Ciclo completo para la creación de sitios Web dinámicos. A partir de 49 €.
Ruby y Ruby on Rails (Curso) Ruby y Ruby on Rails (Curso)
Crear aplicaciones de software y la Web con Ruby y RoR. A partir de 39 €.
Enlaces patrocinados