Java注解
1、注解的本质
在注解使用之前,Java各大框架(Spring,Hibernate等)使用xml来实现其松耦合方式的配置。但是随着项目越来越多,xml内容越来越复杂,维护成本越累越高。因此,业界提出采用一种标记式的高耦合配置方式,叫做注解。开发者可以在方法、类、字段属性等需要配置的地方进行注解。
关于注解和xml两种不同的配置模式,各有争论,各有优劣。注解可以提供更大的便捷高效,易于维护、修改,但耦合度高。而xml刚好相反。在Annotation接口定义的源码中有开头有这么一句话,描述了注解的本质。
The common interface extended by all annotation types //所有的注解类都继承自这个普通接口(Annotation)。
再看注解@override的定义:
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.SOURCE)
public @interface Override {
}
其实实质上就是:
public interface Override extends Annotation{
}
所以,注解的本质就是一个继承了Annotation接口的接口(可以反汇编任意一个注解类进行验证)。
一个注解需要有对应的解析代码。一个类或方法的注解的解析有两种形式:
- 一种式编译期直接扫描(适用于JDK内置注解);
- 一种运行期反射(适用于自定义注解)。