自定义注解,你会了吗?
日常开发中用到了各式各样的注解,常用的注解@Override、@param、@Autowired、@Service等等,这些都是JDK或者Spring这类框架自带。在类,方法,变量,参数,包都可以用注解来注释。很多小伙伴可能还停留在使用层面,知道怎么用,但并不知道实现原理,更没亲自写过自定义注解运用在实际项目中解决问题。
接下来聊聊注解的基础,再聊聊自定义注解在实际项目中的使用。
注解作用
1、生成文档,早期最常见的@return,@param
2、在编译时进行检查,例如@Override,检查是否重写父类
3、简化配置文件,使得代码更清晰
什么是内置注解,元注解,自定义注解?
内置注解
@Override:作用在方法上,声明重写父类的方法
@Deprecated:作用方法,属性,或者类上,标识已过时
@SuppressWarings:用于抑制编译器警告,告知编译器,忽略它们产生了特殊警告
@SafeVarargs:是jdk1.7引入的注解,作用抑制在使用泛型和可变参数搭配使用产生的编译器告警
元注解:元注解是由JDK5.0开始提供的,不能更改,用于定义其他注解,也就是对我们自定义注解进行定义
@Target:声明注解的作用范围可以是类,方法,方法参数变量等,也可以通过枚举类ElementType表达作用类型(可以查看源码)
@Retention:声明注解保留时长的作用域,可以理解为运行环境,
SOURCE(在源文件中有效)
CLASS(源文件编译成Class类文件中有效)
RUNTIME(在运行时有效)
@Documented:文档化注解,作用可以被javadoc此类工具文档化
@Inherited:声明此类能否被继承
自定义注解
/** * 元注解 * public @interface 注解名称 { * 类型 属性名() default 默认值 * } */ //用来声明自定义注解作用范围,变量、方法、类、包... @Target({ElementType.METHOD, ElementType.TYPE}) //声明注解在运行时有效 @Retention(RetentionPolicy.RUNTIME) //文档化 @Documented //此类能否被继承 @Inherited public @interface TestAnnotation { String value() default ""; }