基于SpringAOP下的Aspectj注解方式实现5种通知

1.首先创建被增强类和增强类 并用注解方式创建对象

AOP项目所需jar包 没有的朋友自取https://pan.baidu.com/s/1wj11GkWhlLYq3nfnJFTYbA
提取码:jdbc

User.java(被增强类)

package AopAnon;

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

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


Userprotect.java(增强类)

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(..)) //给定要被增强的类和方法 这行语法结构是(修饰符 返回类型 被增强类的包.类名.方法(参数列表 ..代表1或多个参数)) 修饰符可以不写 *代表任意返回类型

bean2.xml (配置文件)

<?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 (测试类)

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();

    }
}

所需资源
在这里插入图片描述




执行结果
在这里插入图片描述



被增强类出现错误时
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/ssdssa/article/details/111349028