SpringBoot自定义注解及AOP的开发和使用详解

 更新时间:2023年08月15日 08:58:12   作者:JK凯  
在公司项目中,如果需要做一些公共的功能,如日志等,最好的方式是使用自定义注解,自定义注解可以实现我们对想要添加日志的方法上添加,这篇文章基于日志功能来讲讲自定义注解应该如何开发和使用,需要的朋友可以参考下

一、引入 AOP 依赖

自定义注解一般会和 AOP(切面) 结合使用,所以我们首先需要在项目中引入相应的依赖。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-aop</artifactId>
</dependency>

二、创建自定义注解 Log 

annotation.Log:

import java.lang.annotation.*;  
@Target(ElementType.METHOD)  
@Retention(RetentionPolicy.RUNTIME)  
@Documented  
public @interface Log {  
    String value() default "";  
}
  • @Target: 表明该注解可以作用的目标是谁,也就是你的注解是用来修饰方法?类?还是属性?这里是表明作用在方法上。
  • @Retention: 表明该注解作用的生命周期,这里表明在运行时有效。
  • @Documented: 表明被它修饰的注解将被 javadoc 提取成文档。

三、创建 AOP切面类

aspect.LogAspect:

import org.aspectj.lang.ProceedingJoinPoint;  
import org.aspectj.lang.annotation.*;  
import org.springframework.stereotype.Component;  
@Aspect  
@Component  
public class LogAspect {  
    @Pointcut("@annotation(com.jk.annotation.Log)")  
    public void pointCut(){}  
    @Before("pointCut()")  
    public void before() {  
        System.out.println("前置通知...");  
    }  
    @After("pointCut()")  
    public void after() {  
        System.out.println("后置通知...");  
    }  
    @Around("pointCut()")  
    public void around(ProceedingJoinPoint point) throws Throwable {  
        System.out.println("环绕通知前...");  
        point.proceed();  
        System.out.println("环绕通知后...");  
    }  
}
  • @Aspect: 表明该类为切面类,定义切面类时必须加这个注解。
  • @Component: 表明把该类交给 IOC 容器控制。
  • @Pointcut: 定义切入点,结合 @annotation(@interface) 使用,表明该方法为切入点。 @interface 必须写自定义注解的全路径名。
  • @Before: 表明被自定义注解代理的方法执行前,先调用的方法。
  • @After: 表明被自定义注解代理的方法执行后, return 前调用的方法。
  • @Around: 将被自定义注解代理的方法封装起来,环绕通知(即在他之前之后通知), point.proceed() 表明执行的目标方法。

四、自定义注解测试

controller.TestController:

import com.jk.annotation.Log;  
import org.springframework.web.bind.annotation.GetMapping;  
import org.springframework.web.bind.annotation.RequestMapping;  
import org.springframework.web.bind.annotation.RestController;  
@RestController  
@RequestMapping("/test")  
public class TestController {  
    @GetMapping  
    @Log  
    public void test() {  
        System.out.println("执行test方法");
    }  
}

test() 方法上添加了一个 @Log 注解,他会在执行这个方法时,执行我们之前定义切面时创建的前置方法、后置方法、环绕方法。

image.png

在 SpringBoot 中使用自定义注解就是如此简单,一般在通知方法中我们还会结合反射来获取执行方法的一些信息,如方法名,参数,响应值等,在后面我也会新开一篇文章专门讲讲反射,有兴趣的掘友可以关注一下哦!

到此这篇关于SpringBoot自定义注解及AOP的开发和使用详解的文章就介绍到这了,更多相关SpringBoot注解及AOP开发和使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Spring Boot Admin微服务应用监控的实现

    Spring Boot Admin微服务应用监控的实现

    这篇文章主要介绍了Spring Boot Admin微服务应用监控,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-10-10
  • Spring Boot Actuator端点相关原理解析

    Spring Boot Actuator端点相关原理解析

    这篇文章主要介绍了Spring Boot Actuator端点相关原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07
  • Spring Boot自定义配置实现IDE自动提示功能

    Spring Boot自定义配置实现IDE自动提示功能

    这篇文章主要介绍了Spring Boot自定义配置实现IDE自动提示功能,本文图文并茂给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-08-08
  • Java如何获取一个随机数 Java猜数字小游戏

    Java如何获取一个随机数 Java猜数字小游戏

    这篇文章主要为大家详细介绍了Java如何获取一个随机数,类似猜数字小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-03-03
  • 完美解决Java获取文件路径出现乱码的问题

    完美解决Java获取文件路径出现乱码的问题

    今天小编就为大家分享一篇完美解决Java获取文件路径出现乱码的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-07-07
  • Java 内省(Introspector)深入理解

    Java 内省(Introspector)深入理解

    这篇文章主要介绍了Java 内省(Introspector)深入理解的相关资料,需要的朋友可以参考下
    2017-03-03
  • java中对字符串每个字符统计的方法

    java中对字符串每个字符统计的方法

    java中对字符串每个字符统计的方法,需要的朋友可以参考一下
    2013-03-03
  • SpringBoot中@ConfigurationProperties实现配置自动绑定的方法

    SpringBoot中@ConfigurationProperties实现配置自动绑定的方法

    本文主要介绍了SpringBoot中@ConfigurationProperties实现配置自动绑定的方法,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02
  • MyBatis使用<foreach>标签like查询报错解决问题

    MyBatis使用<foreach>标签like查询报错解决问题

    这篇文章主要介绍了MyBatis使用<foreach>标签like查询报错解决问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-03-03
  • 详解Java设计模式之单例模式

    详解Java设计模式之单例模式

    单例模式是一种创建型设计模式,它的目的是确保一个类只有一个实例,并提供一个全局访问点来访问该实例,在单例模式中,类自身负责创建自己的唯一实例,并确保在系统中只有一个实例存在,本文详细介绍了Java设计模式中的单例模式,感兴趣的同学可以参考阅读
    2023-05-05

最新评论