- 在Java中经常看到这样的代码
@Log4j2
@Component
-
什么是注解?(知乎)
注解annotation是JavaSE5.0中新增功能。可以理解为注解是一种标记,这种标记可以在
编译、类加载、运行时被读取,并执行相应的处理。
它可以添加到程序的任何元素上:包声明、类型声明、构造方法、普通方法、成员变量、参数。
基本注解
- Override
用于标识方法,标识该方法属于重写父类的方法 。此注解表面是重写父类的方法,只能用于方法上,并且用于编译阶段,我们在开发的时候,如果注解使用不当,在源码编译时立马就会做出提示。
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.SOURCE)
public @interface Override {
}
- SafeVarargs
@SafeVarargs注解是在JDK7中引入的。此注解适用于接受varargs参数的final和static方法或构造函数。此注解用于确保方法不会对其varargs参数执行不安全的操作。从Java9开始,也适用于私有实例方法。
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.CONSTRUCTOR, ElementType.METHOD})
public @interface SafeVarargs {}
- SuppressWarnings
用于有选择的关闭编译器对类、方法、成员变量、变量初始化的警告。
@Target({TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE})
@Retention(RetentionPolicy.SOURCE)
public @interface SuppressWarnings {
String[] value();
}
- FunctionalInterface
JDK8新增注解。@FunctionalInterface标记在接口上,“函数式接口”是指仅仅只包含一个抽象方法的接口。该注解只能标记在”有且仅有一个抽象方法”的接口上。该注解不是必须的,如果一个接口符合”函数式接口”定义,那么加不加该注解都没有影响。加上该注解能够更好地让编译器进行检查。如果编写的不是函数式接口,但是加上了@FunctionInterface,那么编译器会报错。
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface FunctionalInterface {}
- Deprecated
用于标识方法或类,标识该类或方法已过时,建议不要使用 。使用范围就想到广泛了,构造方法、字段、方法等。
注意:只是提示过时了,不建议使用,不代表不能用,但是我们如果想用某个使用此注解标记的方法或者类的时候,建议找找有没有替换方案,实在没有替换方案,搞清楚为什么它会被设置成过时,使用不当可能会对我们的程序造成你意想不到问题,也可能会挖坑。
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(value={CONSTRUCTOR, FIELD, LOCAL_VARIABLE, METHOD, PACKAGE, PARAMETER, TYPE})
public @interface Deprecated {}
自定义注解
使用@interface自定义注解时,自动继承了java.lang.annotation.Annotation接口,由编译程序自动完成其他细节。在定义注解时,不能继承其他的注解或接口。@interface用来声明一个注解,其中的每一个方法实际上是声明了一个配置参数。方法的名称就是参数的名称,返回值类型就是参数的类型(返回值类型只能是基本类型、Class、String、enum)。可以通过default来声明参数的默认值。
public @interface 注解名 {定义体}