Spring如何使用注解实现AOP配置呢?

书欣 Spring 发布时间:2023-01-08 17:59:38 阅读数:12891 1
下文笔者讲述Spring基于注解实现AOP配置的方法分享,如下所示
实现思路:
    1.引入相应依赖
	2.使用@Aspect和@Pointcut注解为其他方法添加依赖和切面
   使用以上方法后,原方法就得到增强

Maven导入依赖

<dependencies>
    <!--spring上下文-->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>5.3.18</version>
    </dependency>

    <!--测试-->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-test</artifactId>
        <version>5.3.18</version>
    </dependency>

    <!--aop依赖-->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-aspects</artifactId>
        <version>5.3.18</version>
    </dependency>

    <!--junit-->
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
    </dependency>

</dependencies>

Calculator配置信息

package com.java265.aop;
import org.springframework.stereotype.Component;

@Component
public class Calculator {
    public int div(int num1, int num2) {
        System.out.println("Calculator --> div running");
        return num1 / num2;
    }
}

LogAspects配置信息

package com.java265.aop;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.stereotype.Component;

import java.util.Arrays;

@Aspect
@Component
public class LogAspects {

    /**
     * @Pointcut 切入点
     * execution(* com.java265.aop.Calculator.*(..))
     * 任意修饰的类 com.java265.aop.Calculator 下的所有方法和任意形参
     */
    @Pointcut("execution(* com.java265.aop.Calculator.*(..))")
    public void myPointcut() {

    }

    /**
     * @param joinPoint 连接点
     * @Before 前置通知
     */
    @Before("myPointcut()")
    public void logStart(JoinPoint joinPoint) {
        //获取方法名
        String name = joinPoint.getSignature().getName();
        //获取传参
        String args = Arrays.toString(joinPoint.getArgs());
        System.out.println(name + "方法前置通知...参数信息" + args + "");
    }

    /**
     * @param joinPoint 连接点
     * @param result    返回结果
     * @AfterReturning 返回通知
     */
    @AfterReturning(value = "myPointcut()", returning = "result")
    public void logReturn(JoinPoint joinPoint, Object result) {
        String name = joinPoint.getSignature().getName();
        System.out.println(name + "方法返回通知...返回信息{" + result + "}");
    }

    /**
     * @param joinPoint 连接点
     * @param exception 异常信息
     * @AfterThrowing 异常通知
     */
    @AfterThrowing(value = "myPointcut()", throwing = "exception")
    public void logException(JoinPoint joinPoint, Exception exception) {
        String name = joinPoint.getSignature().getName();
        System.out.println(name + "方法异常通知...异常信息{" + exception + "}");
    }

    /**
     * @param joinPoint 连接点
     * @After 最终通知
     */
    @After("myPointcut()")
    public void logEnd(JoinPoint joinPoint) {
        String name = joinPoint.getSignature().getName();
        System.out.println(name + "方法最终通知...");
    }
}

测试类配置信息

package com.java265.test;

import com.java265.aop.Calculator;
import com.java265.config.MainConfigAOP;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = MainConfigAOP.class)
public class AOPTest {
    @Autowired
    private Calculator calculator;

    @Test
    public void test01() {
        System.out.println("----------正常通知----------");
        calculator.div(88, 10);
        System.out.println("\n---------- 异常通知----------");
        calculator.div(99, 0);
    }
}
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaFramework/Spring/202301/5315.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者