Primavera – Inyección de constructor con objeto dependiente

En la inyección de constructor, la inyección de dependencia se inyectará con la ayuda de constructores. Ahora, para configurar la inyección de dependencia como inyección de dependencia del constructor (CDI) en el bean, se realiza a través del archivo de configuración del bean. Para esto, la propiedad que se establecerá con la inyección de dependencia del constructor se declara bajo la etiqueta <constructor-arg> en el archivo bean-config.

Ejemplo:

Java

package com.geeksforgeeks.org;
 
import com.geeksforgeeks.org.IGeek;
 
public class GFG {
 
    // The object of the interface IGeek
    IGeek geek;
 
    // Constructor to set the CDI
    GFG(IGeek geek) { this.geek = geek; }
}

 
La configuración del CDI en el archivo bean-config se muestra a través del siguiente archivo XML de la siguiente manera: 

XML

<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
  
    <bean id="GFG" class="com.geeksforgeeks.org.GFG">
        <constructor-arg>
            <bean class="com.geeksforgeeks.org.impl.CsvGFG" />
        </constructor-arg>
    </bean>
      
<bean id="CsvGFG" class="com.geeksforgeeks.org.impl.CsvGFG" />
<bean id="JsonGFG" class="com.geeksforgeeks.org.impl.JsonGFG" />
          
</beans>

Inyección de constructor con objeto dependiente

Si existe una relación entre las clases de nuestra aplicación Spring, entonces creamos la instancia del objeto dependiente también llamado objeto contenido. Después de crear la instancia del objeto dependiente, lo pasamos como argumento del contenedor de la clase principal. Ejemplo: si un empleado tiene una dirección, la instancia de la clase de dirección es el objeto dependiente.

A. Empleado.java

Java

// Java Program to Illustrate Employee Class
 
package com.geeksforgeeks.org;
import com.geeksforgeeks.org.Address;
 
// Class
public class Employee {
    private String name;
    private String employeeID;
    private String department;
 
    // Here 'address' is an dependent object.
    private Address address;
 
    // Parameterised constructor
    public Employee(String name, String employeeID,
                    String department, Address address)
    {
        // this keyword refers to current instance itself
        this.name = name;
        this.employeeID = employeeID;
        this.department = department;
        this.address = (Address)address;
    }
 
    // Method
    public void display()
    {
        System.out.println("Name: " + name);
        System.out.println("Employee ID: " + employeeID);
        System.out.println("Department: " + department);
        System.out.println("Address: " + address);
    }
}

 
B. Dirección.java

Java

// Java Program to Illustrate Address Class
 
package com.geeksforgeeks.org;
 
public class Address {
    private String houseNo;
    private String pincode;
    private String state;
    private String country;
 
    // Constructor of Address Class
    public Address(String houseNo, String pincode,
                   String state, String country)
    {
        // Super keyword refers to parent class
        super();
        // This keyword refers to current instance itself
        this.houseNo = houseNo;
        this.pincode = pincode;
        this.state = state;
        this.country = country;
    }
 
    // Method
    public String toString()
    {
        return "[" + houseNo + "," + pincode + "," + state
            + "," + country + "]";
    }
}

C. applicationContext.xml

<ref> se utiliza para hacer referencia al objeto dependiente.

XML

<?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="address1" class="com.geeksforgeeks.org.Address"> 
        <constructor-arg value="110/4"></constructor-arg> 
        <constructor-arg value="123092"></constructor-arg> 
        <constructor-arg value="Delhi"></constructor-arg> 
          <constructor-arg value="India"></constructor-arg> 
    </bean> 
   
    <bean id="employee" class="com.geeksforgeeks.org.Employee"> 
        <constructor-arg value="Ram"></constructor-arg> 
        <constructor-arg value="101"></constructor-arg>
        <constructor-arg value="Software testing"></constructor-arg>
        <constructor-arg> 
        <ref bean="address1"/> 
        </constructor-arg> 
    </bean> 
   
</beans>

D. Prueba.java

Java

// Java Program to Illustrate Application Class
 
package com.geeksforgeeks.org;
 
// Importing required classes from respective packages
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
 
// Main(Application) class
public class Test {
 
    // Main driver method
    public static void main(String[] args)
    {
        // Creating new class path resource
        Resource resource = new ClassPathResource(
            "applicationContext.xml");
 
        // Creating an object of BeanFactory class
        BeanFactory factory = new XmlBeanFactory(resource);
 
        // Creating an object of Employee class
        Employee e = (Employee)factory.getBean("employee");
        e.display();
    }
}

Producción:

Name: Ram
Employee ID: 101
Department: Software testing
Address: [110/4, 123092, Delhi, India]

Publicación traducida automáticamente

Artículo escrito por abhinavjain194 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *