自定义注解【项目篇】

        这个技巧应该也算在项目钟非常常见的技巧了

首先,创建一个annotation包,在包里写我们的代码:

@Target(XXXX)
@Retension(XXX)
public @interface CustomAnn {

}

@Target和@Retension基本是一定会有的两个注解

那么他们分别是什么含义呢?有什么作用呢?

@Target

  • 功能:指定了注解可以应用于哪些程序元素(如类、方法、字段等)。

@Retention

  • 功能:指定了注解在何时保留有效。

他们在注解里填充什么参数呢?

@Target

  • 用来定义注解可以应用到哪些类型的Java元素上。它需要填充 ElementType 枚举类型的值,常见的枚举值包括:
    • ElementType.TYPE:用于类、接口(包括注解类型)或枚举声明。
    • ElementType.FIELD:用于字段、枚举常量。
    • ElementType.METHOD:用于方法声明(不包括构造函数)。
    • ElementType.PARAMETER:用于方法、构造函数或初始化程序参数声明。
    • ElementType.CONSTRUCTOR:用于构造函数声明。
    • ElementType.LOCAL_VARIABLE:用于局部变量声明。
    • ElementType.ANNOTATION_TYPE:用于注解类型声明。
    • ElementType.PACKAGE:用于包声明。

@Retention

  • 它用来控制自定义注解在编译和运行时的可见性及生命周期。它需要填充 RetentionPolicy 枚举类型的值,有以下三种策略可选:
    • RetentionPolicy.SOURCE:注解只保留在源代码级别,编译器编译后该注解将被丢弃,不会包含在.class文件中,因此运行时无法访问到。
    • RetentionPolicy.CLASS:注解保留在编译后的.class文件中,但JVM在运行时不加载它,所以运行时也无法通过反射获取到这个注解信息。
    • RetentionPolicy.RUNTIME:注解不仅保留在.class文件中,而且能在运行时通过反射API读取到注解信息。

此外其中还可以添加其他的一些属性,以此来填充我们的注解:

在自定义注解类中添加成员属性的作用是为注解提供附加信息,使注解更具描述性和实用性。这些成员属性可以在使用注解时通过“键值对”的方式指定具体的值,使得注解能够携带更丰富的上下文信息。

其次,创建切面类:

创建切面类建议使用以下格式:

@Pointcut("execution(* com.example.service.*.*(..))")
public void serviceMethodExecution() {}

@Around("serviceMethodExecution()")
public Object aroundAdvice(ProceedingJoinPoint pjp) throws Throwable {
    // ...
}

@Before("serviceMethodExecution()")
public void beforeAdvice() {
    // ...
}

即使用一个@Pointcut的注解的成员方法,来具体的实现和切入面的位置,这两端代码分离开,对代码复用性等都有显著提高。

切点表达式为重中之重,具体的可以参考AOP的常见使用方法-CSDN博客这篇博客,讲的很好,不要再夸了,再夸就不礼貌了。

最后在对应的地方加上我们的自定义注解就可以了

mapper里,impl里等等

相关推荐

  1. 定义注解项目

    2024-03-11 21:46:01       19 阅读
  2. Spring Cloud项目如何防止重复提交(定义注解

    2024-03-11 21:46:01       35 阅读
  3. Spring定义注解

    2024-03-11 21:46:01       15 阅读
  4. 定义防抖注解

    2024-03-11 21:46:01       6 阅读
  5. Spring Boot编写定义校验注解

    2024-03-11 21:46:01       39 阅读
  6. springboot aop 定义注解形式

    2024-03-11 21:46:01       33 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-11 21:46:01       14 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-11 21:46:01       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-11 21:46:01       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-11 21:46:01       18 阅读

热门阅读

  1. 行为型模式

    2024-03-11 21:46:01       17 阅读
  2. 738. 单调递增的数字

    2024-03-11 21:46:01       21 阅读
  3. sqoop-import 详解

    2024-03-11 21:46:01       19 阅读
  4. 最多几个直角三角形python

    2024-03-11 21:46:01       21 阅读
  5. Node docker 容器部署及配置参数

    2024-03-11 21:46:01       18 阅读
  6. 用户登录问题——登录态

    2024-03-11 21:46:01       17 阅读
  7. 算法补习基础完整版

    2024-03-11 21:46:01       14 阅读
  8. LeetCode解法汇总2129. 将标题首字母大写

    2024-03-11 21:46:01       17 阅读
  9. 【SQL实用技巧】-- 分组内求topN问题

    2024-03-11 21:46:01       18 阅读