在写撸代码的时候会经常遇到很多注解,所以就简单整理一下
JDK自带注解
1.@Override
覆盖父类的方法
2.@Deprecated
表示当前方法过时
3.@suppvisewarnings
忽略警告
常见的第三方注解
Spring:
1.@Autowired
2.@Service
3.@Repository
Mybatis:
1.@InsertProvider
2.@UpdateProvider
3.@Options
注解的分类
1.按照运行机制分类
源码注解 注解只在源码中存在,编译成 .class 文件就不存在了
编译时注解 注解在源码和 .class文件中都存在
运行时注解 在运行阶段还起作用,甚至会影响运行逻辑的注解
2.按照来源分
来自JDK的注解
来自第三方注解
我们自己定义的注解
3.元注解 给注解进行注解
自定义注解
使用@interface关键字定义注解
加粗部分为元注解
@Target({ElementTypeMETHOD,ElementType.TYPE})
//注解的作用域
主要有 CONSTRUCTOR 构造函数 FIELD 字段声明 LOCAL_VARIABLE 局部变量 METHOD 方法声明 PACKAGE 包声明 PARAMETER 参数声明 TYPE 类接口
@Retention(@RetentionPolicy.RUNTIME)
//注解的生命周期 SOURCE 只在源码显示编译时丢弃 CLASS 编译时会记录到class中,运行时忽略 RUNTIME 运行时存在,可以通过反射读取
@Inherited //允许子类继承
@Documented 生成javadoc时会包含注解
public @interface Description{
String desc(); //成员必须以无参数无异常的方式来声明
String author();
int age() default 18; //可以用default给成员指定一个默认值
}
成员的类型是受到限制的除了正常的基本类型及String,Class,Annotation,Enumeration
* 如果注解只有一个成员,则成员必须取名为value(),在使用时可以忽略成员名和赋值号(=)
注解类可以没有成员,没有成员的注解类称为标识注解
使用自定义注解
使用注解语法:@<注解名>(<成员名1>=<成员值1>,<成员名1>=<成员值1>,<成员名1>=<成员值1>....)
@Decription(desc="i am eyeColor", author="Mooc boy",age=18)
public String eyeColor(){
return "red"
}