Resumen e instanciación de Spring-bean

Una nota

El desarrollo de springboot es más popular ahora, pero muchos desarrolladores ignoran el hecho de que springboot es un subproyecto derivado de spring, y no entienden cómo la primavera juega con springboot. ¿Es posible jugar con springboot con solo unos días de entrenamiento y artículos? Definitivamente, la respuesta no es buena. Si quieres entender el springboot en profundidad, debes saber la primavera. La base es muy importante. No puedes decir nada más que importante; los artículos básicos del autor y la comprensión conceptual de la primavera también tienen un propósito muy importante, ese es Para prepararse para el análisis del código fuente más adelante, si va al código fuente de inmediato, creo que mucha gente se enredará en él y no sabrá la verdad, por lo que el aprendizaje honesto es la única forma de mejorar la tecnología. Los desarrolladores o estudiantes interesados ​​pueden seguir mi columna sping.

Introducción a dos frijoles

Como el artículo anterior ya ha hablado sobre el paquete de beans y los conceptos básicos, no se repetirá. El contenedor Spring IOC puede acomodar uno o más beans. Los beans se crean con la provisión de metadatos de configuración. Los metadatos de configuración también se han mencionado en el artículo anterior. Su método de configuración original es xml.

La definición de estos beans corresponde en realidad a BeanDefinition Objec t. El siguiente código fuente es una oración; BeanDefinition (interfaz) es una instancia de un bean, que tiene valores de atributos, valores de parámetros de construcción e información más profunda, estos son proporcionados por sus implementadores específicos.

Un BeanDefinition describe una instancia de bean, que tiene valores de propiedad, valores de argumento de constructor
e información adicional suministrada por
implementaciones concretas.

Ejemplos de metadatos para BeanDefinition:

  1. Ciclo de declaración de frijoles y alcance (scop, devoluciones de llamada del ciclo de vida)
  2. Nombre de clase calificado por paquete: generalmente el nombre de clase completo de la clase real
  3. La colaboración mutua directa depende del contenedor.
  4. Configure otra información al crear el objeto, como usar bean para administrar el grupo de conexiones, limitar el tamaño del grupo de conexiones, etc.

Los metadatos generalmente se convierten en atributos :

  1. clase (nombre completo del bean)
  2. nombre (el nombre del frijol)
  3. alcance
  4. argumentos de constructor
  5. propiedades
  6. modo de cableado automático (modo de configuración automática)
  7. modo de inicialización diferida
  8. método de inicialización (método de inicialización de bean)
  9. método de destrucción (método de destrucción de frijol)

Además, también puede configurar metadatos a través del método registerSingleton y el método registerBeanDefinition a través del implementador ApplicationContext (como usar GetBeanFactory () para obtener DefaultListableBeanFactory), pero este método no es común, generalmente usando xml

Tres nombres de frijol

Cada bean generalmente tiene una o más identidades, utilizando alias de bean, etc., pero el contenedor debe tener un identificador único al administrar el bean. Los metadatos generalmente se configuran en función de XML, y <bean>los atributos de identificación y nombre de un elemento generalmente representan el identificador único de un bean. Nombrando regla es la primera letra después de letras o números en minúscula, tales como el uso de la joroba userDao,userService . Por lo general, es posible no especificar el nombre del bean. El contenedor de resorte genera automáticamente un identificador único para el bean. Sin embargo, si desea hacer referencia al bean por nombre, debe encontrar el nombre utilizando el elemento ref o la búsqueda de estilo del Localizador de servicios.

Cuatro alias

Los alias se usan generalmente en proyectos grandes. Por ejemplo, cuando el sistema principal y el subsistema están integrados, un bean se llama fromName en el mismo contenedor, y el alias apuntará a toName. Los ejemplos son los siguientes:

<alias name="fromName" alias="toName"/>

Cinco instancias de frijol

En realidad, hay tres formas de instanciar beans. La primera es usar el elemento bean directamente. Después de inicializar el contenedor, puede obtener directamente la instancia del bean. Esto no es diferente del objeto nuevo habitual, pero de manera predeterminada, la instancia del contenedor bean Los ejemplos obtenidos después de la conversión son casos únicos. El segundo es usar static factory-method, (modo de fábrica estático). El tercero es factory-method(patrón de fábrica de instancias). Los métodos segundo y tercero no son muy comunes: el contenedor llamará al método fatory para instanciar el bean durante la inicialización, y el método fatory llamará al método createInstance en la fábrica.

Si la diferencia es la clase interna, usualmente se usa $ para distinguir, como com.youku1327. Animal$$dog

5.1 Usar constructor para instanciar bean

El ejemplo es el siguiente, algunas personas que usan el marco de primavera para desarrollar deben estar muy familiarizadas, a menudo usamos esta forma para instanciar frijoles

	<bean id="iocService" class="com.youku1327.ioc.service.IocService">
        <!-- additional collaborators and configuration for this bean go here -->
    </bean>

5.2 Usar el método estático de fábrica para instanciar frijoles

fábrica estático sigue, el presente ejemplo fatory-método es su fábrica estática en sí (se puede poner otros casos nuevo estática dentro de la fábrica), pero debe ser una declaración de tipo de método Stati C.

/**
 * @Author lsc
 * @Description <p> </p>
 * @Date 2019/10/31 13:55
 */
public class StaticBeanService {

    private static StaticBeanService staticBeanService = new StaticBeanService();

    // other properties

    private StaticBeanService() {}

    public static StaticBeanService createInstance() {
        // add your properties
        return staticBeanService;
    }

}

La configuración es la siguiente:

<?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">

    <!-- static factory method services -->

    <bean id="staticBeanService" class="com.youku1327.bean.entity.StaticBeanService" factory-method="createInstance">

    </bean>
    
</beans>

5.3 Usar el método de fábrica de instancias para instanciar beans

El patrón de fábrica instanciado es muy similar al patrón de fábrica estático, la diferencia es si el método de crear una instancia usa la palabra clave estática . El automóvil en este caso debería ser una interfaz, y luego implementar la interfaz a través de una clase de implementación específica (como Lamborghini Car, BMW car, etc.), y luego usar el método createCarInstance correspondiente en Carfactory para configurar el bean correspondiente en xml. Un ejemplo de implementación simple es el siguiente:

Las entidades son las siguientes:

/**
 * @Author lsc
 * @Description <p> </p>
 * @Date 2019/10/31 14:58
 */
public class Car {

    private String carName;
    private String color;

    public String getCarName() {
        return carName;
    }

    public void setCarName(String carName) {
        this.carName = carName;
    }

    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        this.color = color;
    }
}

La fábrica de creación de instancias es la siguiente:

/**
 * @Author lsc
 * @Description <p> </p>
 * @Date 2019/10/31 15:00
 */
public class CarFactory {

    private static Car car = new Car();

    private CarFactory(){

    }

    public Car createCarInstance(){
        return car;
    }
}

La configuración es la siguiente:

<?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">

    <!-- the factory bean, which contains a method called createInstance() -->
    <bean id="carFactory" class="com.youku1327.bean.factory.CarFactory">
        <!-- inject any dependencies required by this locator bean -->
    </bean>

    <!-- the bean to be created via the factory bean -->
    <bean id="car" factory-bean="carFactory" factory-method="createCarInstance"/>


</beans>

Seis documentos de referencia.

Contenedor COI

[El código fuente de github de este artículo está vinculado al final del artículo de la cuenta pública].

Supongo que te gusta

Origin www.cnblogs.com/zszxz/p/12696944.html
Recomendado
Clasificación