Serie Spring de SSM (3) ---- Explicación detallada de IoC basada en anotaciones Spring

Las funciones a ser implementadas por la configuración de anotaciones y la configuración xml son las mismas, las cuales son para reducir el acoplamiento entre los programas. Es solo que la forma de configuración es diferente.

Explicación detallada de IoC basada en anotaciones de Spring

  • Echemos un vistazo a la configuración XML anterior:
    <bean id="accountService" class="com.cz.service.impl.AccountServiceImpl" scope="" init-method="" destroy-method="">
        <property name="" value="" ref=""></property>

    </bean>

Hay varias etiquetas y atributos en la configuración XML anterior. En cuanto a la función de estas etiquetas y atributos, puede ir al artículo anterior. Portal

  • A continuación, el IoC basado en anotaciones de Spring también se divide en cuatro categorías:
  • Usado para crear objetos:
    • Su <bean>función es la misma que la función de escribir una etiqueta en un archivo de configuración XML.
  • Usado para inyectar datos:
    • Su función es la misma que la de <bean>escribir una <property>etiqueta en la etiqueta del archivo de configuración XML .
  • Se usa para cambiar el alcance de la acción:
    • Su función es la misma que la de las <baen>etiquetas en las <scope>etiquetas.
  • Relacionado con el ciclo de vida :
    • Y su papel está en <bean>el uso de la etiqueta init-methody destroy-methodel papel es el mismo.
  • Si desea utilizar anotaciones, primero debe importar el nuevo espacio de nombres en el archivo de configuración y especificar los paquetes que se analizarán.
<?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">
    <!--告知spring在创建容器时要扫描的包,配置所需要的标签不是在beans的约束中,而是一个名称为context名称空间和约束中-->
    <context:component-scan base-package="com.cz"></context:component-scan>
</beans>

Anotaciones utilizadas para crear objetos

相当于:<bean id="" class="">

@Component 注解

  • efecto
    • Se usa para almacenar el objeto de clase actual en el contenedor Spring
  • Atributos
    • value: Se utiliza para especificar el identificador único (Id) del Bean. Si no está escrito, el valor predeterminado es el nombre de la clase actual y la primera letra está en minúsculas
  • Además de las @Componentnotas externas, las notas hay tres derivadas que se utilizan para crear objetos, atributos y @Component, como se muestra en la siguiente tabla:
Nombre de la anotación efecto
@Controller Capa de presentación
@Service Capa empresarial
@Repository Capa de persistencia

  Las funciones y propiedades de los tres son exactamente las mismas que las de @Repository. Estas tres anotaciones son las anotaciones que el marco de Spring nos proporciona con un uso claro de tres niveles, lo que hace que nuestros objetos de tres niveles sean más claros.
  Detalles : si hay uno y solo un atributo para asignar en la anotación, y el nombre es valor, el valor se puede omitir en la asignación.

package com.cz.service.impl;

import com.cz.dao.AccountDao;
import com.cz.dao.impl.AccountDaoImpl;
import com.cz.service.AccountService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;

/**
 * 账户的业务层实现类
 */
@Service(value = "accountService")
public class AccountServiceImpl implements AccountService {
    
    

    private AccountDao accountDao;

    public AccountServiceImpl(){
    
    
        System.out.println("对象创建了");
    }

    public void saveAccount(){
    
    
        accountDao.saveAccount();
        System.out.println("service中的saveAccount方法执行了");
    }
}

Anotaciones para inyectar datos

相当于:<property name=" " ref=" "> <property name="" value="">

@Autowired注解

  • efecto
    • Inyectar automáticamente por tipo (por tipo)
    • El contenedor usa primero el tipo de variable para buscar, si está en el contenedor 唯一一个 Bean 的类型匹配, luego se inyectará directamente; si no está en el contenedor 任何 Bean的类型与要注入的变量类型匹配, entonces se reportará un error; si está en el contenedor 有多个 Bean 的类型匹配, el contenedor será 以变量的名称作为 Bean的id进行查找inyectado, si se encuentra una coincidencia , se inyectará, y si no se encuentra, se informará un error.
  • Posición de apariencia
    • Variable o método
  • detalle
    • Al usar anotaciones para inyectar propiedades,set 方法可以省略
/**
 - 账户的业务层实现类
 */
@Service(value = "accountService")
public class AccountServiceImpl implements AccountService {
    
    

    @Autowired
    private AccountDao accountDao = null;
    //......

Para las anotaciones anteriores, puede mirar la imagen a continuación:
Inserte la descripción de la imagen aquí
@Qualifier 注解

  • efecto

    • En 按照类型注入的基础之上再按照名称注入. Lo es 给类成员注入时不能单独使用,必须和 @Autowired``一起使用. Pero se puede usar solo al inyectar parámetros de método.
  • Propiedades
    - value: la inyección de frijoles se utiliza para especificar el唯一标识 (Id)

/**
 - 账户的业务层实现类
 */
@Service(value = "accountService")
public class AccountServiceImpl implements AccountService {
    
    

    @Autowired
    @Qualifier("accountDao")
    private AccountDao accountDao = null;
	//.....

@Resource 注解

  • efecto

    • Siga automáticamente 名称注入(By Name), inyecte directamente de acuerdo con la identificación del Bean, se puede usar de forma independiente.
  • Atributos

    • name : Especifique el id del Bean inyectado
/**
 * 账户的业务层实现类
 */
@Service(value = "accountService")
public class AccountServiceImpl implements AccountService {
    
    

//    @Autowired
//    @Qualifier("accountDao")
    @Resource(name = "accountDao")
    private AccountDao accountDao = null;

Las tres anotaciones anteriores solo pueden inyectar datos de otros tipos de Bean, y los tipos básicos y los tipos String necesitan usar las siguientes anotaciones.Además, la inyección de tipos de colección solo se puede lograr a través de XML .

@Value 注解

  • efecto
    • inyección基本类型和 String 类型数据
  • Atributos
    • value: Se utiliza para especificar el valor de los datos. Puede usar Spring's SpEL (expresión el de Spring, escrita en:${表达式})

Se usa para cambiar el alcance de la acción.

相当于:<bean id="" class="" scope="">

@Scope 注解

  • efecto
    • Especificar el alcance del bean
  • Atributos
    • value: El valor del rango especificado. El valor comúnmente utilizado essingleton、prototype

Relacionado con el ciclo de vida

相当于:<bean id="" class="" init-method="" destroy-method="" />

@PreDestroy 注解

  • efecto
    • Se utiliza para especificar el método de destrucción.

PostConstruct 注解

  • efecto
    • Se utiliza para especificar el método de inicialización.
@PostConstruct
public void init() {
    
    
    System.out.println("初始化方法执行了");
}

@PreDestroy
public void destroy() {
    
    
    System.out.println("销毁方法执行了");
}

Comparación de XML y métodos de anotación

  • Ventajas de las anotaciones
    • Configuración sencilla y mantenimiento sencillo
  • Ventajas de XML
    • No es necesario modificar el código fuente al realizar la modificación, y no implica la recompilación ni la implementación.

Comparación de Spring Management Bean:

Configuración basada en XML Configuración basada en anotaciones
Definición de frijol <bean id = "..." class = "..." /> @Component、@Controller、@Service、@Repository
Nombre del frijol Por ido nameatributo especifica @Component("user")
Inyección de frijoles Por inyección <property>o <constructor-arg>etiqueta @Autowired、@Qualifier、@Resource
Alcance del frijol scopeEspecificado por atributo @Scope
Ciclo de vida del frijol Por init-methodo destroy-methodatributo especifica los métodos de inicialización y destrucción @PostConstruct、@PreDestroy
Bean es adecuado para la escena. Bean proviene de un tercero y no puede modificar el código fuente La clase de implementación de Bean es desarrollada por nosotros mismos.

Este es el final del IoC basado en anotaciones de Spring. A continuación, analizaré la diferencia entre la implementación XML y la implementación de anotaciones en el mismo caso.

Supongo que te gusta

Origin blog.csdn.net/weixin_43844418/article/details/113770738
Recomendado
Clasificación