La inyección de dependencia es la funcionalidad principal proporcionada por Spring IOC (Inversion of Control). El módulo Spring-Core es responsable de inyectar dependencias a través de los métodos Constructor o Setter.
En Setter Dependency Injection (SDI), la dependencia se inyectará con la ayuda de los métodos setters y getters. Se utiliza un archivo de configuración de bean para establecer DI como SDI en el bean . Para ello, la propiedad que se establecerá con SDI se declara bajo la etiqueta <property> en el archivo bean-config.
Inyección Setter 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 Dirección es el objeto dependiente y se incluirá en la clase Empleado.
Implementación: el siguiente ejemplo muestra una inyección de setter con un objeto dependiente.
A. Empleado.java
Cada empleado tiene las siguientes propiedades:
- Nombre
- ID de empleado
- Departamento
- Dirección (objeto dependiente)
Ejemplo: Clase de empleado
Java
// Java Program to Illustrate Employee Class package com.geeksforgeeks.org; // Class class Employee { // Class member members private String name; private String employeeID; private String department; private Address address; // Setter public void setName(String name) { this.name = name; } // Setter public void setemployeeID(String employeeID) { this.employeeID = employeeID; } // Setter public void setdepartment(String department) { this.department = department; } // Setter public void setAddress(Address address) { this.address = address; } // Getter public String getName() { return name; } // Getter public String getemployeeID() { return employeeID; } // Getter public String getdepartment() { return department; } // Getter public Address getAddress() { return address; } // Method public void display() { // Print statements System.out.println("Name: " + getName()); System.out.println("Employee ID: " + getEmployeeID()); System.out.println("Department: " + getDepartment()); System.out.println("Address: " + getAddress().toString()); } }
B. Dirección.java
La dirección tiene las siguientes propiedades:
- Número de casa
- Código PIN
- Estado
- País
Ejemplo:
Java
package com.geeksforgeeks.org; class Address { private String houseNo; private String pincode; private String state; private String country; public Address(String houseNo, String pincode, String state, String country) { super(); this.houseNo = houseNo; this.pincode = pincode; this.state = state; this.country = country; } public String toString() { return "["+ houseNo + "," + pincode + "," + state + "," + country + "]"; } }
C. applicationContext.xml
Usaremos el atributo ref del elemento de propiedad para especificar la referencia del bean de dirección en el bean de empleado .
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="address" class="com.geeksforgeeks.org.Address"> <property name="houseNo" value="110/4"></property> <property name="pincode" value="121212"></property> <property name="state" value="Delhi"></property> <property name="country" value="India"></property> </bean> <bean id="employee" class="com.geeksforgeeks.org.Employee"> <property name="name" value="Ram"></property> <property name="employeeID" value="1001"></property> <property name="department" value="Software development"></property> <property name="address" ref="address"></property> </bean> </beans>
D. Archivo de aplicación (Test.java)
Esta clase llamará al método display() de la clase Employee.
Ejemplo:
Java
// Java Program to Illustrate Application Class package com.geeksforgeeks.org; // Importing required classes import org.springframework.beans.factory.BeanFactory; import org.springframework.beans.factory.xml.XmlBeanFactory; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.core.io.ClassPathResource; import org.springframework.core.io.Resource; // Application(Main) Class class Test { // Main driver method public static void main(String[] args) { // Creating a 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"); // Calling print() method inside main() method e.display(); } }
Producción:
Name: Ram Employee ID: 1001 Department: Software development Address: [110/4, 121212, 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