Resorte – Autocableado

Spring es un marco de desarrollo de aplicaciones de código abierto de Java que le permite crear aplicaciones empresariales robustas utilizando Plain Old Java Objects ( POJO en resumen). Spring Framework puede inyectar dependencias automáticamente. El contenedor Spring detecta las dependencias especificadas en el archivo de configuración y @ la relación entre los beans. Esto se conoce como cableado automático en Spring. Una aplicación autocableada requiere comparativamente menos líneas de código pero, al mismo tiempo, proporciona muy poca flexibilidad al programador.

Modos de cableado automático

Hay cinco modos de cableado automático:

1. no

Este modo le dice al marco que no se debe realizar el cableado automático. Es el modo predeterminado utilizado por Spring.

XML

<bean id="state" class="sample.State">
 <property name="name" value="UP" />
</bean>
<bean id="city" class="sample.City"></bean>

2. porNombre

Utiliza el nombre del bean para inyectar dependencias. Sin embargo, requiere que el nombre de la propiedad y el frijol sean iguales. Invoca el método setter internamente para el cableado automático.

XML

<bean id="state" class="sample.State">
 <property name="name" value="UP" />
</bean>
<bean id="city" class="sample.City" autowire="byName"></bean>

3. por Tipo

Inyecta la dependencia según el tipo de bean. Busca en el archivo de configuración el tipo de clase de la propiedad. Si encuentra un bean que coincida, inyecta la propiedad. Si no, el programa arroja un error. Los nombres de la propiedad y del bean pueden ser diferentes en este caso. Invoca el método setter internamente para el cableado automático.

XML

<bean id="state" class="sample.State">
 <property name="name" value="UP" />
</bean>
<bean id="city" class="sample.City" autowire="byType"></bean>

4. constructor

Inyecta las dependencias requeridas invocando al constructor. Funciona de forma similar al modo “byType” pero busca el tipo de clase de los argumentos del constructor. Si no se detecta ninguno o más de un bean, arroja un error; de lo contrario, autoconecta el «byType» en todos los argumentos del constructor.

XML

<bean id="state" class="sample.State">
 <property name="name" value="UP" />
</bean>
<bean id="city" class="sample.City" autowire="constructor"></bean>

5. detección automática

El modo de detección automática utiliza otros dos modos para el cableado automático: constructor y byType. Primero intenta realizar la conexión automática a través del modo constructor y, si falla, utiliza el modo byType para la conexión automática. Funciona en Spring 2.0 y 2.5, pero está obsoleto a partir de Spring 3.0.

XML

<bean id="state" class="sample.State">
 <property name="name" value="UP" />
</bean>
<bean id="city" class="sample.City" autowire="autodetect"></bean>

Programa de muestra para el modo byType

Nombre del archivo: Estado.java

Java

public class State {
    private String name;
    public String getName() { return name; }
    public void setName(String s) { this.name = s; }
}

Nombre del archivo: Ciudad.java

Java

class City {
    private int id;
    private String name;
    private State s;
    public int getID() { return id; }
    public void setId(int eid) { this.id = eid; }
    public String getName() { return name; }
    public void setName(String st) { this.name = st; }
    public State getState() { return s; }
    @Autowired public void setState(State sta)
    {
        this.s = sta;
    }
    public void showCityDetails()
    {
        System.out.println("City Id : " + id);
        System.out.println("City Name : " + name);
        System.out.println("State : " + s.getName());
    }
}

Archivo de configuración de frijol Spring:

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:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context.xsd">
<bean id="state" class="sample.State">
<property name="name" value="UP" />
</bean>
<bean id="city" class="sample.City" autowire="byName"></bean>
</beans>

Archivo de programa de prueba: DemoApplication.java

Java

@SpringBootApplication
public class DemoApplication {
    public static void main(String[] args)
    {
        SpringApplication.run(DemoApplication.class, args);
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        City cty = context.getBean("city", City.class);
        cty.setId(01);
        cty.setName("Varanasi");
        State st = context.getBean("state", State.class);
        st.setName("UP");
        cty.setState(st);
        cty.showCityDetails();
    }
}

Producción: 

City ID : 01
City Name : Varanasi
State : UP

Ventaja del cableado automático

Requiere menos código porque no necesitamos escribir el código para inyectar la dependencia explícitamente.

Desventaja del cableado automático

  • Sin control del programador.
  • No se puede usar para valores primitivos y de string.

Publicación traducida automáticamente

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