English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Ejemplo de inyección de dependencias mediante constructor

Podemos inyectar dependencias a través del constructor. <bean>de <constructor-arg>Los elementos subyacentes se utilizan para la inyección de constructor. Aquí, vamos a inyectar

Valores originales y basados en cadenas Objetos dependientes (que contienen objetos) Valores de conjunto

Valores de inyección de valores originales y basados en cadenas

Vamos a ver algunos ejemplos simples de inyección de valores originales y basados en cadenas. Aquí hemos creado tres archivos:

Employee.java applicationContext.xml Test.java

Employee.java

Esta es una clase simple que contiene dos campos id y name. Esta clase tiene cuatro constructores y un método.

package com.w;3codebox;
public class Employee {
private int id;
private String name;
public Employee() { System.out.println("def cons"); }
public Employee(int id) { this.id = id; }
public Employee(String name) { this.name = name; }
public Employee(int id, String name) {
    this.id = id;
    this.name = name;
}
void show(){
    System.out.println(id+"+name);
}
}


applicationContext.xml

Proporcionamos información a Bean a través de este archivo. constructor-El elemento arg llama al constructor. En este caso, se llamará al constructor parametrizado de tipo int. Constructor-El atributo value del elemento arg asignará el valor especificado. El atributo type especifica que se llamará al constructor de parámetros int.

<?xml version="1.0" encoding="UTF-8"?>
<beans
    xmlns="http://www.springframework.org/schema/beans
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance
    xmlns:p="http://www.springframework.org/schema/p
    xsi:schemaLocation="http://www.springframework.org/schema/beans
                http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<bean id="e" class="com.w3codebox.Employee">
<constructor-arg value="10" type="int"></constructor-arg>
</bean>
</beans>

Test.java

Esta clase obtiene Bean del archivo applicationContext.xml y llama al método show.

package com.w;3codebox;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.*;
public class Test {
    public static void main(String[] args) {
        
        Resource r=new ClassPathResource("applicationContext.xml");
        BeanFactory factory=new XmlBeanFactory(r);
        
        Employee s=(Employee)factory.getBean("e");
        s.show();
        
    }
}

Salida: 10Vacio


Inyección de valores basados en cadenas

Si no especifica la propiedad type en el elemento arg del constructor, se llamará por defecto al constructor de tipo cadena.

....
<bean id="e" class="com.w3codebox.Employee">
<constructor-arg value="10></constructor-arg>
</bean>
....

Si cambia el elemento bean como se mencionó anteriormente, se llamará al constructor de parámetros de cadena y la salida será 0 10。

Salida: 0 10


También puede pasar cadenas literales como se muestra a continuación:

....
<bean id="e" class="com.w3codebox.Employee">
<constructor-arg value="Sonoo"></constructor-arg>
</bean>
....

Salida: 0 Sonoo


Puede pasar enteros literales y cadenas de texto de la siguiente manera

....
<bean id="e" class="com.w3codebox.Employee">
<constructor-arg value="10" type="int"></constructor-arg>
<constructor-arg value="Sonoo"></constructor-arg>
</bean>
....

Salida: 10 Sonoo