java 内置注解
| 注解 | 作用 | 描述 |
|---|---|---|
| @Override | 将覆盖父类中的方法 | 作用在子类的方法上 |
| @Deprecated | 代码被弃用 | 使用了被@Deprecated注解的代码则编译器将发出警告 |
| @SuppressWarnings | 关闭编译器警告信息 | 取值为String[],警告信息是多种的,可以具体指明哪些类型的警告信息被抑制 |
@SuppressWarnings 取值范围如下
all,抑制所有警告
boxing,抑制与封装/拆装作业相关的警告
cast,抑制与强制转型作业相关的警告
dep-ann,抑制与淘汰注释相关的警告
deprecation,抑制与淘汰的相关警告
fallthrough,抑制与switch陈述式中遗漏break相关的警告
finally,抑制与未传回finally区块相关的警告
hiding,抑制与隐藏变数的区域变数相关的警告
incomplete-switch,抑制与switch陈述式(enum case)中遗漏项目相关的警告
javadoc,抑制与javadoc相关的警告
nls,抑制与非nls字串文字相关的警告
null,抑制与空值分析相关的警告
rawtypes,抑制与使用raw类型相关的警告
resource,抑制与使用Closeable类型的资源相关的警告
restriction,抑制与使用不建议或禁止参照相关的警告
serial,抑制与可序列化的类别遗漏serialVersionUID栏位相关的警告
static-access,抑制与静态存取不正确相关的警告
static-method,抑制与可能宣告为static的方法相关的警告
super,抑制与置换方法相关但不含super呼叫的警告
synthetic-access,抑制与内部类别的存取未最佳化相关的警告
sync-override,抑制因为置换同步方法而遗漏同步化的警告
unchecked,抑制与未检查的作业相关的警告
unqualified-field-access,抑制与栏位存取不合格相关的警告
unused,抑制与未用的程式码及停用的程式码相关的警告
元注解
标注注解的注解,约束定义的注解用在字段、方法还是类上;保留在编译期、运行期还是源文件上等
在JDK 1.5中提供了4个标准的元注解:@Target,@Retention,@Documented,@Inherited, 在JDK 1.8中提供了两个元注解 @Repeatable和@Native
@Target
作用是标明该注解可以用在什么地方
public enum ElementType {
TYPE, // 类、接口、枚举类
FIELD, // 成员变量(包括:枚举常量)
METHOD, // 成员方法
PARAMETER, // 方法参数
CONSTRUCTOR, // 构造方法
LOCAL_VARIABLE, // 局部变量
ANNOTATION_TYPE, // 注解类
PACKAGE, // 可用于修饰:包
TYPE_PARAMETER, // 类型参数,JDK 1.8 新增
TYPE_USE // 使用类型的任何地方,JDK 1.8 新增
}
@Retention
作用是指定注解的生命周期
lombok 的注解生命周期就是 RetentionPolicy.SOURCE
如果 反射 时需要获取到注解信息需要是 RetentionPolicy.RUNTIME,这是自定义注解的绝大部分场景
public enum RetentionPolicy {
SOURCE, // 源文件保留(java 文件)
CLASS, // 编译期保留,默认值(class 文件)
RUNTIME // 运行期保留(运行时也存在)
}
@Inherited
子类是否继承父类的注解,比如父类使用了 @Inherited 修饰的注解,子类会自动继承注解
自定义注解
@Target(value = {ElementType.METHOD})// 使用范围:方法
@Retention(RetentionPolicy.RUNTIME)// 作用域:运行时有效
@Documented // 可以被抽取到API文档中
@Inherited // 可以被子类继承。
@interface MyAnnotation {
// 注解的参数:参数类型 + 参数名();
String name() default "";// 需要输入一个String类型,不输入默认空字符串。
int age() default 0;// 需要输入一个int类型,不输入默认0。
int id() default -1;// 默认值-1,代表不存在。
String[] schools();// 需要一个String类型数组
}
lombok @Data
RetentionPolicy.SOURCE 编译后的 class 中没有注解,并且反射也拿不到 @data 注解
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.SOURCE)
public @interface Data {
String staticConstructor() default "";
}
springmvc @RestController
标注了 @Controller 和 @ResponseBody
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Controller
@ResponseBody
public @interface RestController {
@AliasFor(
annotation = Controller.class
)
String value() default "";
}
spring @SpringbootApplication
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
// 可以作为配置类,这个注解上有 @Configuration
@SpringBootConfiguration
// 开启自动配置
@EnableAutoConfiguration
// 扫描规则
@ComponentScan(
excludeFilters = {@Filter(
type = FilterType.CUSTOM,
classes = {TypeExcludeFilter.class}
), @Filter(
type = FilterType.CUSTOM,
classes = {AutoConfigurationExcludeFilter.class}
)}
)
public @interface SpringBootApplication{}