为什么要学习注解?学习注解有什么好处?学完能做什么?
1、能够读懂别人写的代码,特别是框架相关的代码
2、让编程更加简洁,代码更加清晰
3、让别人高看一眼
概念:
注解是一种这样的东西,标志是一个@符号,他能够关联数据和其他的信息,
比较正规一点的描述是:
Java提供了一种程序中的元素关联任何信息和任何元数据的途径和方法。
java中的常见注解
JDK自带注解
@Override 覆盖父类方法
@Deprecated 这个方法过时了
@suppressWarings("deprecation") 忽略警告
常见第三方注解
@Autowired
Spring: @Service
@Repository
@InsertProvider
Mybatis: @UpdateProvider
@Options
注解的分类
按照运行机制分
1.源码注解 ——只存在于源码中,编译成.class文件就不存在了
2.编译时注解——源码和.class文件中均存在 如:@override @deprecated等jdk自带的注解
3.运行时注解——运行阶段仍然会起作用,甚至会影响运行逻辑的注解,如:spring的autowired
按照注解来源分类
jdk自带注解
第三方注解
自定义注解
元注解:注解的注解叫元注解
自定义注解:
注解语法规则
//@Target 注解的作用域(
CONSTRUCTOR //构造方法声明
FIE LD //字段声明
LOCAL_VARIABLE //局部变量声明
METHOD //方法声明
PACKAGE //包声明
PARAMETER //参数声明
TYPE //类接口
)
@Target({ElementType.METHOD,ElementType.TYPE})
//@Retention生命周期(
SOURCE :只在源码显示,编译时会丢弃
CLASS :编译时会记录到class中,运行时忽略
RUNTIME :运行时存在,可以通过反射读取
)
@Retention(RetentionPolicy.RUNTIME)
@Inherited 运行子类继承 (必须是子类实现父类,且父类有注解;才会继承类上面的注解)
@Documented 生成javadoc是会包含注解
//上面这4行 就是元注解
public @interface Description{ //使用@interface关键字定义注解
String desc(); ——成员以无参无异常方式声明
String author();
int age() default 18; ——可以使用default为成员指定一个默认值
}
注意
成员类型是受到限制的,合法的类型包括原始类型及String,Class,Annotation,Enumeration
如果注解只有一个成员,则成员名必须取名为value(),在使用时可以忽略成员名和赋值号(=)
注解类可以没有成员,没有成员的注解称为标识注解
使用自定义注解
使用注解的语法:
@<注解名>(<成员名1>=<成员值1>,<成员名2>=<成员值2>,......)
@Description(desc="I am jxb",author="Mooc boy",age=18)
public String eyeColor(){
return "red";
}
解析注解
通过反射获取类,函数或成员上的运行时注解信息,从而实现动态控制程序的运行逻辑。
解析子类的注解:
解析父类的注解:
其他代码与上面一样,只需要修改Child和Person类
自己学习笔记整理,不足之处望原谅!