Java学习--spring框架--入门前置通知与后置通知

本文主要探讨了Spring框架中AspectJ注解的使用,包括@Before的前置通知、@After的后置通知、@AfterRunning的返回通知、@AfterThrowing的异常通知以及@Around的环绕通知。通过加入相关jar包,配置自动扫描和启用AspectJ注解,可以实现面向切面的编程。示例代码展示了如何创建和调用这些通知。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

spring的AspectJ注解
AspectJ的通知类型

  • @Before:前置通知,在方法的执行之前执行
  • @After:后制通知,在方法的执行之后执行
  • @AfterRunning:返回通知,在方法返回结果之后执行
  • @AfterThrowing:异常通知,在方法抛出异常之后执行
  • @Around:环绕通知,围绕着方法执行
  • 加入相应的jar包
<!-- https://mvnrepository.com/artifact/org.aspectj/aspectjweaver -->
    <dependency>
        <groupId>org.aspectj</groupId>
        <artifactId>aspectjweaver</artifactId>
        <version>1.7.4</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/aspectj/aspectjrt -->
    <dependency>
        <groupId>org.aspectj</groupId>
        <artifactId>aspectjrt</artifactId>
        <version>1.7.4</version>
    </dependency>
  • 在配置文件中加入自动扫描、AspjectJ注解生效
    <context:component-scan base-package="spring.aop.impl"></context:component-scan>
<!--    使AspectJ起着作用:自动为匹配的类生成代理对象-->
    <aop:aspectj-autoproxy></aop:aspectj-autoproxy>
  1. 写面向切面的类
//把这个类声明为一个切面:1. 将该类放到IOC容器中;2. 声明为切面
@Aspect
@Component
public class LoggingAspect {

//    声明该方法为前置通知:在目标方法开始之前执行
    @Before("execution(public int spring.aop.impl.ArithmeticCalculator.*(int,int))")
    public void beforeMethod(JoinPoint joinPoint){
        String methodName = joinPoint.getSignature().getName();
        List<Object> args = Arrays.asList(joinPoint.getArgs());
        System.out.println("The method "+methodName+" begins with "+args);
    }

//    后置通知:在目标方法执行后执行(无论是否有异常),但是不能访问目标方法执行的结果
    @After("execution(* spring.aop.impl.ArithmeticCalculator.*(*,* ))")
    public void afterMethod(JoinPoint joinPoint){
        String methodName = joinPoint.getSignature().getName();
        List<Object> args = Arrays.asList(joinPoint.getArgs());
        System.out.println("The method "+methodName+" ends");
    }
}
  1. 在主函数中调用
public static void main(String[] args) {
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
        ArithmeticCalculator arithmeticCalculator = (ArithmeticCalculator) applicationContext.getBean("arithmeticCalculator");
        int result = arithmeticCalculator.div(12,4);
        System.out.println("result:"+result);
    }
  1. 运行结果
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值