注解的作用:
- 能够读懂别人写的代码,特别是框架相关的的代码
- 让变成更加简洁,代码更加清晰
- 让别人高看一眼
不懂注解就不能说学过Spring,mybatis
Java 1.5 开始引入注解。
注解概念:
Java提供了一种源程序中的元素关联任何信息和任何元数据的途径和方法。
Java常见的注解
JDK 自带注解: @Override @Deprecated @Suppvisewrnings
@Override 覆盖父类的方法
@Deprecated 方法过时
@SuppressWarnings 告诉编译器对被批注的代码元素内部的某些警告保持静默。
常见的第三方注解
Spring : @Autowired @Service @Repository
Mybatis : @InsertProvider @UpdateProvider @Options
@Autowired 可以在使用实例的时候省去在Spring配置文件中大量的配置
注解的分类
按照运行机制:
- 源码注解 注解只在源码中存在,编译成.class文件就不存在了
- 编译时注解 在源码中和.class文件中都存在 如JDK自带的三个注解 @Override, @Deprecated, @Suppvisewarnings
- 运行时注解 在运行阶段还起作用,甚至会影响运行逻辑。 @Autowired 把成员变量注入进来
元注解: 给注解的注解
自定义注解
自定义注解语法要求
使用 @interface 关键字来定义注解
成员以 无参 无异常方式声明
可以用default为成员指定一个默认值
成员类型是受限的,合法的类型包含基本类型以及String,Class,Annotation和Enumeration
如果注解只有一个成员,则成员名必须取名为 value(),在使用时可以忽略成员名和赋值号(=)
注解类可以没有成员,没有成员的注解称为标识注解
<span style="font-size:14px;"><span style="font-family:KaiTi_GB2312;">@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
public @interface Description {
String desc();
String author();
int age() default 18;
}</span></span>
注解的注解(元注解)
上面的代码中的前四行就是元注解:
<span style="font-size:14px;"><span style="font-family:KaiTi_GB2312;">@Target({ElementType.METHOD, ElementType.TYPE}) //注解的作用域,有CONSTRUCTOR, FIELD, LOCAL_VARIABLE, METHOD, PACKAGE, PARAMETER, TYPE.
@Retention(RetentionPolicy.RUNTIME) //注解的生命周期:: SOURCE, CLASS, RUNTIME
@Inherited //标识型注解, 允许继承</span></span>
<span style="font-size:14px;"><span style="font-family:KaiTi_GB2312;">@Documented //生成javadoc 时包含注解的信息
</span></span>
使用自定义注解
使用自定义注解的语法:
<span style="font-size:14px;"><span style="font-family:KaiTi_GB2312;">@<注解名> (<成员名1>=<成员值1> , <成员名2>=<成员值2> , ...)
@Description (desc="I am eysColor", author="Mooc boy", age=18)
public String eyeColor() {
}</span></span>
解析注解
概念:通过反射获取类、函数或成员函数上运行时注解信息,从而实现动态控制程序运行的逻辑。