Implémentation de 5 notifications basées sur la méthode d'annotation Aspectj sous SpringAOP

1. Créez d'abord la classe améliorée et la classe améliorée et créez des objets avec des annotations

Les amis qui ne disposent pas du package jar requis pour le projet AOP peuvent le
récupérer https://pan.baidu.com/s/1wj11GkWhlLYq3nfnJFTYbA Code d'extraction: jdbc

User.java (classe améliorée)

package AopAnon;

import org.springframework.stereotype.Component;
@Component
public class User {

    public  void add(){
        System.out.println("add.......");
    }
}


Userprotect.java (classe améliorée)

package AopAnon;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.stereotype.Component;
@Component
@Aspect
public class Userprotect {
    //前置通知  0在被增强代码前执行
    @Before(value = "execution(* AopAnon.User.add(..))")
    public void before(){
        System.out.println("before..........");
    }
    //最终通知  原代码执行后触发
    @After(value = "execution(* AopAnon.User.add(..))")
    public void after(){
        System.out.println("After..........");
    }
    //返回通知 代码正常执行完毕后执行
    @AfterReturning(value = "execution(* AopAnon.User.add(..))")
    public void afterReturning(){
        System.out.println("afterReturning..........");
    }
    //环绕通知  在被增强代码执行前和执行后都会执行一遍
    @Around(value = "execution(* AopAnon.User.add(..))")
    public void around(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
        System.out.println("around前..........");
        proceedingJoinPoint.proceed();
        System.out.println("around后..........");
    }
    // 异常通知 当被增强代码执行时发生了异常时执行
    @AfterThrowing(value = "execution(* AopAnon.User.add(..))")
    public void afterThrowing(){
        System.out.println("afterThrowing..........");
    }
}



** value = "execution (* AopAnon.User.add (..)) // Compte tenu de la classe et de la méthode à améliorer, la structure grammaticale de cette ligne est (le modificateur renvoie le package de la classe améliorée. Nom de la classe. Méthode ( Liste des paramètres: représente 1 ou plusieurs paramètres)) Le modificateur ne peut pas être écrit * représente tout type de retour

bean2.xml (fichier de configuration)

<?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"
       xmlns:aop="http://www.springframework.org/schema/aop"
       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
                           http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
"
>
<!--开启组件扫描-->
    <context:component-scan base-package="AopAnon"></context:component-scan>

<!--    扫描Aspectj注释作为代理对象-->
    <aop:aspectj-autoproxy></aop:aspectj-autoproxy>


</beans>


TestDemo.java (classe de test)

package AopAnon;

import org.junit.jupiter.api.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Testdemo {
    @Test
    public void testdemo1(){
        ApplicationContext context=new ClassPathXmlApplicationContext("bean2.xml");
        User user = context.getBean("user", User.class);
        user.add();

    }
}

Ressources nécessaires
Insérez la description de l'image ici




Résultats de la mise en œuvre
Insérez la description de l'image ici



Lorsqu'une erreur se produit dans la classe améliorée
Insérez la description de l'image ici

Je suppose que tu aimes

Origine blog.csdn.net/ssdssa/article/details/111349028
conseillé
Classement