Uno, concepto Spring AOP y uso específico

1. Definición de primavera AOP:

(Programación Orientada a Aspectos) Programación Orientada : el proceso de software, antes y después de la ejecución pueden ser extensiones adicionales apropiadas, lo llamamos sección de características. La superficie cortada se puede instalar y quitar fácilmente. Podemos entender visualmente el aspecto como un complemento de navegador, instalarlo cuando sea necesario y desinstalarlo cuando no sea necesario.

  • El enfoque de AOP consiste en abstraer y encapsular funciones generales independientes del negocio en clases de aspectos.
  • El objetivo final : ampliar el comportamiento del programa en el caso del código fuente de acero inoxidable
  • ¿Por qué las funciones extendidas se llaman aspectos?
    Respuesta: El proceso de negocio de software normal se ejecuta secuencialmente de arriba a abajo. Las funciones que agregamos se agregan en el proceso de ejecución del software original como una sección transversal.
    Inserte la descripción de la imagen aquí

En segundo lugar, conceptos relacionados con AOP

Uno, la relación entre spring aop y AspectJ:

  1. Eclipse AspectJ, un lenguaje de programación orientado a aspectos basado en la plataforma java, tiene un sistema completo que puede realizar el concepto de programación orientada a aspectos aop en tiempo de ejecución.

  2. Pero Spring Aop no se implementa completamente con AspectJ, solo se basa en AspectJWeaver en la parte inferior para lograr la coincidencia de clases y métodos

Como se muestra en la captura de pantalla, el proceso de esta delineación del alcance es confiar en AspectJWeaver para lograr
El proceso de delineación de este alcance se logra confiando en AspectJWeaver
3. El principio central de Spring AOP es usar el modo proxy para implementar la extensión de la función de tiempo de ejecución del objeto.

En segundo lugar, los conceptos clave

anotación Descripción
Aspecto Aspectos, funciones específicas de componentes conectables, generalmente un aspecto solo implementa una función general. La esencia es una clase estándar, no es necesario heredar e implementar otras clases. El formato debe ser público y el valor de retorno puede ser nulo u objeto
Clase / método de destino La clase de destino / método de destino se refiere al método que realmente debe ejecutarse y relacionarse con el negocio. La función es similar a los métodos de inserción y creación en servicio y dao
PointCut Punto de entrada: use la expresión de ejecución para explicar en qué clases del sistema debe actuar el aspecto
JoinPoint El punto de conexión es el objeto que contiene los metadatos de la clase / método de destino durante la operación del aspecto. Esto debe pasarse en el método de aspecto. Metadatos: información que describe la clase de destino y el método de destino
Consejo Notificaciones, que indican el momento de ejecución de aspectos específicos. Spring incluye cinco tipos diferentes de notificaciones.

Tres, proceso de configuración de AOP:

  1. Depende de AspectJ
 <dependencies>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.2.6.RELEASE</version>
        </dependency>
        <!--spring aop的底层依赖-->
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
            <version>1.9.5</version>
        </dependency>

    </dependencies>
  1. Darse cuenta de la clase de aspecto, método

// 切面类
public class MethodAspect {
    
    
    // 切面方法,用于扩展额外功能
    public void printExecutionTime(JoinPoint joinpoint) {
    
    
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss SSS");
        String now = sdf.format(new Date());
        String className = joinpoint.getTarget().getClass().getName();//获取目标类名
        String methodName = joinpoint.getSignature().getName();// 获取目标方法名
        System.out.println("---->" + now + ":" + className + "." + methodName);
    }
}
  1. Configurar Aspect Bean

  2. Definir PointCut (qué métodos de qué clases del sistema se ven afectados por el aspecto actual)

  3. Configurar notificación de aviso

    La versión completa del archivo de 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"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        https://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/aop
        https://www.springframework.org/schema/aop/spring-aop.xsd">
    <bean id="userDao" class="com.imooc.spring.aop.dao.UserDao"/>
    <bean id="userService" class="com.imooc.spring.aop.service.UserService">
        <property name="userDao" ref="userDao"/>
    </bean>
    <bean id="employeeDao" class="com.imooc.spring.aop.dao.EmployeeDao"/>
    <bean id="employeeService" class="com.imooc.spring.aop.service.EmployeeService">
        <property name="employeeDao" ref="employeeDao"/>
    </bean>
    <!--2,aop配置:配置切面类Aspect Bean-->
    <bean id="methodAspect" class="com.imooc.spring.aop.aspect.MethodAspect">
    </bean>
    <aop:config>
        <!--3,定义PointCut-->
        <!--pointcut:切点,使用expression表达式说明作用范围-->
        <!--execution(public * com.imooc..*.*(..))说明切面的作用com.imooc包下所有类的所有方法-->
        <aop:pointcut id="pointcut" expression="execution(public * com.imooc..*.*(..))"/>
        <!--4,定义切面类-->
        <aop:aspect ref="methodAspect">
            <!--5,配置Advice通知:before通知,代表在目标方法运行前运行methodAspect.printExecutionTime方法-->
            <aop:before method="printExecutionTime" pointcut-ref="pointcut"/>
        </aop:aspect>
    </aop:config>
</beans>

Cuarto, el objeto JoinPoint

JoinPoint: obtenga la información principal de la clase objetivo y el método objetivo

Método básico
Demostración de código específico
Demostración de código
Si desea rastrear y depurar proyectos en línea en el trabajo real, puede agregar este aspecto y usar el registro de inicio de sesión para generar los parámetros

Cinco, expresión de punto de corte PointCut
Inserte la descripción de la imagen aquí

  • público se puede omitir
  • El valor de retorno puede coincidir con cualquier (*), también puede ser vacío o String, objeto, etc.
  • Por ejemplo, si quiero hacer coincidir el nombre de la clase que contiene el servicio, se puede escribir como * servicio y los demás son iguales
  • Regalar una castaña
    Inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/qq_36792120/article/details/113611868
Recomendado
Clasificación