techiall / Blog

🍋 [My Blog] See discussions
https://github.com/techiall/Blog/discussions
MIT License
8 stars 1 forks source link

Java 元注解和自定义注解 #46

Open techiall opened 5 years ago

techiall commented 5 years ago

Java 自定义注解

使用 @interface 就可以自定义注解,Java 也给我们提供了一些元注解。

在 spring boot 中可以利用 aop (面向侧面的程序设计 aspect-oriented programming)简化处理自定义注解。spring boot 使用 aop 需要导入如下依赖。

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

自定义注解使用如下

@Target({ ElementType.PARAMETER, ElementType.METHOD })
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Log {}

Java 元注解

元注解作用在其他注解上时,不需要每个都使用。

@Target

标识注解的使用范围,多个范围用花括号括起来即可。

使用:@Target({ElementType.PARAMETER, ElementType.METHOD })

类型 范围
ElementType.TYPE 接口、类、枚举、注解
ElementType.FIELD 字段、枚举的常量
ElementType.METHOD 方法
ElementType.PARAMETER 方法参数
ElementType.CONSTRUCTOR 构造函数
ElementType.LOCAL_VARIABLE 局部变量
ElementType.ANNOTATION_TYPE 注解
ElementType.PACKAGE

@Document

使用了该注解,就会包含在 Javadoc 中。

@Inherited

使用了该注解,子类可以继承父类的注解。

一般指的是 extents,接口不算继承,只能说是实现(implement)。

@Retention

注解的保留策略,只能选一。

使用: @Retention(RetentionPolicy.SOURCE)

类型 范围
RetentionPolicy.SOURCE 只作用在 代码 中,字节码(Class)中不存在
RetentionPolicy.CLASS default,@Retention 默认策略,只在字节码中存在
RetentionPolicy.RUNTIME 字节码中存在,运行的时候可以用 反射 得到

参考链接