Primavera – Inyección Setter con Mapa

Spring es un marco ligero de código abierto que permite a los desarrolladores de Java EE crear aplicaciones empresariales sencillas, fiables y escalables. Este marco está diseñado sobre el concepto de inyección de dependencia que se enfoca en proporcionar varias formas de administrar objetos comerciales.

Inyección de dependencia

La inyección de dependencia (DI) es un proceso en el que los objetos definen sus dependencias, es decir, los otros objetos con los que trabajan. Ocurre solo a través de argumentos de constructor, argumentos para un método de fábrica o propiedades que se establecen en la instancia del objeto después de que se construye o se devuelve desde un método de fábrica. Luego, el contenedor es responsable de inyectar esas dependencias cuando crea el bean. Este proceso es fundamentalmente el inverso, por lo que también se denomina Inversión de Control (IoC) .

La inyección de dependencia existe de dos maneras, 

1) Inyección de dependencia basada en constructor: el contenedor invoca a un constructor con una serie de argumentos, cada uno de los cuales representa una dependencia. Necesitamos usar el subelemento <constructor-arg> de la etiqueta <bean> para la inyección del constructor.

XML

<bean id="beanId" class="BeanClass">
  <constructor-arg type="String" value="test"/>
  <constructor-arg type="int" value="1002"/>
</bean>

2) Inyección de dependencia basada en setter : esto lo hace el contenedor que llama a métodos setter en beans después de invocar un constructor sin argumentos o un método de fábrica estático sin argumentos para instanciar el bean. Necesitamos usar el subelemento <property> de la etiqueta <bean> para la inyección de setter.

XML

<bean id="beanId" class="BeanClass">
  <property name="secondBean" ref="SecondBean"/>
  <property name="message" value="This is message."/>
</bean>

A través de la inyección de setter usando la etiqueta <property>, podemos proporcionar valores como strings, primitivas, colecciones, etc. según nuestros requisitos. En este ejemplo, veremos la inyección de setter usando Map. Mientras usamos el mapa, necesitamos usar las etiquetas <map> y <entry> para establecer los valores.

XML

<bean id="beanId" class="BeanClass">
        <property name="name" value="geeks" />
        <property name="name2">
            <map>
                <entry key="key1" value="value1"/>
                <entry key ="key2" value-ref="DataSource"/>
            </map>
        </property>
</bean>

Proyecto de ejemplo

Crearemos una aplicación Spring simple en eclipse para mostrar el nombre, el mensaje de bienvenida y los detalles del marco como salida en la consola.

Estructura del proyecto:

  • Cree un nuevo proyecto Java: SpringSetterInjection.
  • Agregue todos los archivos Spring Jar necesarios al proyecto.
  • Cree una clase de bean: InfoBean.java, para definir todas las propiedades y los métodos getter/setter de esas propiedades.
  • Cree un archivo de configuración XML: applicationContext.xml, para las configuraciones de bean.
  • Cree una clase de prueba de bean: InfoBeanTest.java, para definir el contenedor de contexto de la aplicación y obtener los objetos de bean.
  • Ejecute la aplicación para obtener el resultado.

Después de crear el proyecto, las clases de bean y el archivo de configuración XML, a continuación se muestra la estructura del proyecto.

Project Structure

Estructura del proyecto

Los archivos spring jar se pueden descargar desde Maven Repository .

Archivos a crear:

InfoBean.java:

Java

package com.geeks.beans;
  
import java.util.Map;
  
public class InfoBean {
      
    private String name;
    private String msg;
    private Map<String, String> frameworks;
      
      
    public Map<String, String> getFrameworks() {
        return frameworks;
    }
    public void setFrameworks(Map<String, String> frameworks) {
        this.frameworks = frameworks;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getMsg() {
        return msg;
    }
    public void setMsg(String msg) {
        this.msg = msg;
    }
      
    public void display() {
        System.out.println("Hi "+name+", "+msg);
        System.out.println("Framework Names: Description");
        for (Map.Entry<String,String> entry : frameworks.entrySet())
            System.out.println(entry.getKey() + ": " + entry.getValue());
    }
  
}
  • En la clase de bean, definimos las propiedades ‘name’ y ‘msg’ como tipo String y ‘frameworks’ como Map.
  • Genere los métodos getter/setter de todas las propiedades.
  • Defina un método – display(), para imprimir los valores de las propiedades.
  • Como el campo ‘marco’ es un tipo de mapa, necesitamos iterar el mapa para imprimir los valores clave.
  • Entonces, aquí estamos usando un bucle for-each para iterar los ‘marcos’ e imprimir los valores en él.

applicationContext.xml:

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"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd">
  
    <bean id="info" class="com.geeks.beans.InfoBean">
        <property name="name" value="Lakshmi" />
        <property name="msg" value="Welcome to GeeksforGeeks!!" />
        <property name="frameworks">
            <map>
                <entry key="Struts"
                    value="Struts is an open source framework used to develop Java MVC based web applications."></entry>
                <entry key="Spring"
                    value="Spring is an application framework used to develop Java Enterprise applications
                           and designed on concept called Dependency injection."></entry>
                <entry key="Hibernate"
                    value="Hibernate is an object-relational mapping (ORM) framework that works with relational
                           databases to manage the data."></entry>
            </map>
        </property>
    </bean>
  
</beans>
  • En el archivo XML, debemos incluir la ubicación del esquema XML del bean para la configuración.
  • Estamos configurando los valores de propiedad de Map usando las etiquetas <map> y <entry key=”” value=””> dentro de la etiqueta <property> .

InfoBeanTest.java:

Java

package com.geeks.test;
  
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
  
import com.geeks.beans.InfoBean;
  
public class InfoBeanTest {
  
    public static void main(String[] args) {
  
        ApplicationContext con = new ClassPathXmlApplicationContext("com/geeks/resources/applicationContext.xml");
        InfoBean infoBean = (InfoBean) con.getBean("info");
        infoBean.display();
    }
  
}

El contenedor de contexto de la aplicación crea el objeto bean y estamos haciendo que ese objeto bean llame al método display().

Producción:

  • Ejecute la clase de prueba como un proyecto Java.
  • El contenedor Spring creará el objeto ‘InfoBean’ y establecerá todos los valores de propiedad y hará que el objeto bean esté disponible para el desarrollador.
  • Usando el objeto bean, llama al método display() e imprime el siguiente resultado en la consola.
Output

Producción

Publicación traducida automáticamente

Artículo escrito por yaminitalisetty 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 *