Java基础--注解篇
引言
今天想试一下手写一个mini版的spring框架,需要自定义注解,发现自己对元注解有点模糊,特意回头对元注解复习,特此笔记。
元注解
元注解可以理解为注解鼻祖,元最初的意思,元注解用来衍生出注解。元注解可以分为@Target、@Retention、@Documented、@Inherited
简单分为三类where、when、what:可以理解一句话为注解在哪里什么时候做什么。
注解类的包java.lang.annotation
@Target
targer目标的意思,指作用于范围。
public enum ElementType {
TYPE, // 类、接口、枚举类
FIELD, // 成员变量(包括:枚举常量)
METHOD, // 成员方法
PARAMETER, // 方法参数
CONSTRUCTOR, // 构造方法
LOCAL_VARIABLE, // 局部变量
ANNOTATION_TYPE, // 注解类
PACKAGE, // 可用于修饰:包
TYPE_PARAMETER, // 类型参数,JDK 1.8 新增
TYPE_USE // 使用类型的任何地方,JDK 1.8 新增
@Retention注解
保留的意思,指保留的时间
public enum RetentionPolicy {
SOURCE, // 源文件保留
CLASS, // 编译期保留,默认值
RUNTIME // 运行期保留,可通过反射去获取注解信息
}
@Documented
意思是记载,当使用 javadoc 工具为类生成帮助文档时是否要保留其注解信息
@Inherited
继承的意思,使被它修饰的注解具有继承性(类使用了被@Inherited修饰的注解,子类将自动具有该注解)。子对类有效。
运用
/**
* @ Author :lzy
* @ Date :Created in 2020/7/28 21:40
* @ Description:
*/
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface LZYAutoWired {
String value() default "";
}
/**
* @ Author :lzy
* @ Date :Created in 2020/7/28 21:36
* @ Description:
*/
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface LZYController {
String value() default "";
}
/**
* @ Author :lzy
* @ Date :Created in 2020/7/28 21:40
* @ Description:
*/
@Target({ElementType.TYPE,ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface LZYRequestMapping {
String value() default "";
}
/**
* @ Author :lzy
* @ Date :Created in 2020/7/28 21:42
* @ Description:
*/
@Target({ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface LZYRequestParam {
String value() default "";
}
/**
* @ Author :lzy
* @ Date :Created in 2020/7/28 21:41
* @ Description:
*/
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface LZYService {
String value() default "";
}