java自定义注解以及Spring boot配置aop使用自定义注解

前言

随着springboot的流行,注解使用的越来越多:
在这里插入图片描述
Java注解不仅让我们减少了项目中XML文件,方便了维护,同时也使我们代码更简洁。那么项目中我们如何自定义注解呢?

1. 内置注解

Java注解(Annotation)又称Java标注,是JDK5.0引入的一种注释机制。
和Javadoc不同,Java标注可以通过反射获取标注内容。在编译器生成类文件时,标注可以被嵌入到字节码中。 Java虚拟机可以保留注释内容,在运行时可以获取到注释内容。当然它也支持自定义Java注释。

Java定义了一套注释解,共有7个,3个在java.lang中,剩下4个在java.lang.annotation中。

作用于代码的注解

  • @Override:检查该方法是否是重写方法。如果发现其父类,或者是引用的接口中并没有该方法时,会报编译错误。
  • @Deprecated :标记过时方法。如果使用该方法,会报编译警告。
  • @SuppressWarnings :指示编译器去忽略注解中声明的警告。

元注解(作用于注解的注解)

  • @Target:用于描述注解的使用范围。取值(ElementType)有:
     1.CONSTRUCTOR:应用于构造器。
     2.FIELD:应用于字段或属性(包括枚举中的常量)。
     3.LOCAL_VARIABLE:应用于局部变量。
     4.METHOD:应用于方法。
     5.PACKAGE:应用于包。
     6.PARAMETER:应用于参数。
     7.TYPE:类、接口(包括注解类型) 或enum声明。
     8.ANNOTATION_TYPE:应用于注解类型。
     9.TYPE_PARAMETER:1.8版本新增,应用于类型变量。
     10.TYPE_USE:1.8版本新增,应用于任何使用类型的语句中(例如声明语句、泛型和强制转换语句中的类型)。
  • @Inherited:标记这个注解是继承于哪个注解类。
  • @Retention:用于描述注解的生命周期。取值(RetentionPoicy)有:
      1.SOURCE:在源文件中有效,编译时被丢弃,不包含在类文件中。
      2.CLASS:在class文件中有效,由编译器保留,但Java虚拟机(JVM)会忽略。
      3.RUNTIME:由JVM 加载,包含在类文件中,在运行时可以被获取到。
  • @Document:表明该注解标记的元素可以被Javadoc 或类似的工具文档化。

从 Java 7 开始,额外添加了 3 个注解:

  • @SafeVarargs :Java 7 开始支持,忽略任何使用参数为泛型变量的方法或构造函数调用产生的警告。
  • @FunctionalInterface :Java 8 开始支持,标识一个匿名函数或函数式接口。
  • @Repeatable:Java 8 开始支持,标识某注解可以在同一个声明上使用多次。

2. 自定义注解

使用@interface自定义注解时,自动继承了java.lang.annotation.Annotation接口,由编译程序自动完成其他细节。在定义注解时,不能继承其他的注解或接口。

@interface用来声明一个注解,其中的每一个方法实际上是声明了一个配置参数。方法的名称就是参数的名称,返回值类型就是参数的类型。

定义注解格式如下:

public @interface 注解名 {定义体}

下面是一个具体的例子:

package com.jid.java.test.annotation;

import java.lang.annotation.*;

/**
 * @description: 自定义注解
 * @author: jidi
 * @eamil: jidi_jidi@163.com
 * @create: 2020-04-07 21:19
 **/

@Documented
@Inherited
@Retention(RetentionPolicy.RUNTIME)
public @interface OptLog {

    public int optType() default 0;

    public String optMessage() default "";

}

注解参数的可支持数据类型:

  • 所有基本数据类型(intfloatbooleanbytedoublecharlongshort)
  • String类型
  • Class类型
  • enum类型
  • Annotation类型
  • 以上所有类型的数组

定义体中的参数设定,按照以下规定:

  • 只能用public或默认(default)这两个访问权修饰.例如,String value();这里把方法设为default默认类型。
  • 参数成员只能用基本类型:intfloatbooleanbytedoublecharlongshort八种基本数据类型和 StringEnumClassannotations等数据类型,以及这些类型的数组。
  • 如果只有一个参数成员,最好把参数名称设为value

注解元素的默认值:

  • 注解元素必须有确定的值,要么在定义注解的默认值中指定,要么在使用注解时指定,非基本类型的注解元素的值不可为null
  • 使用空字符串或0作为默认值是一种常用的做法。

3 使用自定义注解

自定义注解跟其它框架提供的注解一样使用,只是参数值根据实际情况确定。

 @OptLog(optType = 1)
 public void print() {
	...
}

4. spring boot框架aop配置使用自定义注解

在spring boot框架中,使用自定义注解,步骤如下:

  1. 在pom文件引入aop依赖
    在这里插入图片描述
    注意:在完成了引入AOP依赖包后。AOP的默认配置属性中,spring.aop.auto属性默认是开启的,也就是说只要引入了AOP依赖后,默认已经增加了@EnableAspectJAutoProxy,不需要在程序主类中增加@EnableAspectJAutoProxy来启用。

  2. 自定义注解
    在这里插入图片描述

  3. 定义切面
    在这里插入图片描述

  4. 使用注解

参考链接

SpringBoot学习5之自定义注解
SpringBoot 集成AOP 自定义注解
Java实现自定义注解

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值