Montaje automático Spring-Bean

1.1 Directorio de proyectos

1.2 Concepto de montaje automático

  • El cableado automático es una forma de utilizar Spring para satisfacer las dependencias de los beans.
  • Spring buscará beans dependientes para un bean en el contexto de la aplicación.

Hay tres mecanismos de ensamblaje para beans en Spring, a saber:

  1. Configuración explícita en xml;
  2. Configuración explícita en java;
  3. Mecanismo implícito de descubrimiento de beans y montaje automático.

El ensamblaje automático de Spring debe implementarse desde dos perspectivas, o dos operaciones:

  1. Escaneo de componentes: Spring descubrirá automáticamente los beans creados en el contexto de la aplicación.
  2. Autowiring: Spring satisface automáticamente las dependencias entre beans, que es lo que llamamos IoC / DI.

Nota : La combinación de escaneo de componentes y ensamblaje automático ejerce un gran poder, por lo que la configuración de la pantalla se reduce al mínimo.

1.3 Ejemplo de código

Cree dos nuevas clases de entidad, Student Teacher tiene un método de función .

package cn.guardwhy.domain;

public class Student {
    
    
    public void function(){
    
    
        System.out.println("学生学习!!!");
    }
}
package cn.guardwhy.domain;

public class Teacher {
    
    
    public void function(){
    
    
        System.out.println("老师教导学生学习!!");
    }
}

Crear una nueva clase de usuario Usuario

package cn.guardwhy.domain;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
    
    
    private Student student;
    private Teacher teacher;
    private String str;
}

Escribir archivo de configuración de Spring

<?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="student" class="cn.guardwhy.domain.Student"/>
    <bean id="teacher" class="cn.guardwhy.domain.Teacher"/>

    <bean id="user" class="cn.guardwhy.domain.User">
        <property name="student" ref="student"/>
        <property name="teacher" ref="teacher"/>
        <property name="str" value="guardwhy"/>
    </bean>
</beans>

Código de prueba

package cn.guardwhy.Test;

import cn.guardwhy.domain.User;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class MyTest {
    
    
    @Test
    public void testMethodAutowire(){
    
    
        ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
        User user = (User) context.getBean("user");
        user.getTeacher().function();
        user.getStudent().function();
    }
}

1.4 porNombre

autowire byName (autowire por nombre)
En el proceso de configuración manual de xml, a menudo se producen errores como la falta de letras y el uso de mayúsculas, y no se pueden comprobar, lo que reduce la eficiencia del desarrollo.
El uso de montaje automático evitará estos errores y simplificará la configuración.

Código de prueba

Modifique la configuración del bean y agregue un atributo autowire = "byName"

<!--byName:会自动在容器上下文中查找,和自己对象set方法后面的值对应的beanid-->
<bean id="user" class="cn.guardwhy.domain.User" autowire="byName">
     <property name="student" ref="student"/>
</bean>

para resumir

Cuando un nodo de frijol tiene el atributo de autowire byName.

  1. Encontrará todos los nombres de métodos establecidos en su clase, como setStudent, y obtendrá la cadena con el conjunto eliminado y la primera letra en minúscula, es decir, estudiante.
  2. Vaya al contenedor de primavera para encontrar si hay un objeto con esta identificación de nombre de cadena.
  3. Si la hay, elimine la inyección; si no, informe una excepción de puntero nulo.

1,5 por tipo

autowire byType (montaje automático por tipo)

Código de prueba

El uso de autowire byType primero debe garantizar que los objetos del mismo tipo sean únicos en el contenedor de resorte. Si no es único, se notificará una excepción no única.

<!--byType:会自动在容器上下文中查找,和自己对象属性类型相同的bean!!-->
<bean id="user" class="cn.guardwhy.domain.User" autowire="byType">
     <property name="student" ref="student"/>
</bean>

1.6 Resumen

  • Cuando se usa por nombre, es necesario asegurarse de que la identificación de todos los beans sea única, y el bean debe ser coherente con el valor del método set de la propiedad inyectada automáticamente.
  • Cuando es por tipo, es necesario asegurarse de que la clase de todos los beans sea única, y el bean debe ser coherente con el tipo de propiedades inyectadas automáticamente.

Supongo que te gusta

Origin blog.csdn.net/hxy1625309592/article/details/115026852
Recomendado
Clasificación