java面试题网站:www.javaoffers.com
java给我们提供了一些标准的注解,在这里做一下统计。
注解名词 | 应用场合 | 目的 |
---|---|---|
Deprecated | 全部 | 将目标标记为过时的 |
SuppressWarnings | 除了包和注解之外的所有情况 | 阻止某个给定的类型的警告信息 |
Override | 方法 | 检查该方法是否覆盖了某一个超类的方法 |
PostConstruct | 方法 | 被标记的方法应该在构造之后立即被调用 |
PreDestroy | 方法 | 被标记的方法应该在移除之前立即被调用 |
Resource | 类,接口,方法,域(FIELD) | 在类或接口上:标记为在其他地方要用到的资源。在方法或域上:标记为‘注入’ |
Resiurces | 类,接口 | 一个资源数组 |
Generated | 全部 | 目的是供代码生成工具来使用 |
Target | 注解 | 指明可以应用这个注解的那些项 |
Retention | 注解 | 指明这个注解可以保留多久 |
Documented | 注解 | 指明这个注解应该包含在注解项的文档中 |
Inherited | 注解 | 指明这个注解应用于一个类的时候,能够自动被他的子类继承 |
标准注解的分类:
1. 用于编译的注解
@Deprecated:注解可以添加到任何不再鼓励使用的目标。所以,当你使用一个过时的目标时,编译器会发出警告。
@Override:这个注解只能应用到方法上,编译器会检查具有这种注解的方法是否真正覆盖了一个来自于超类的方法。
@Generated: 注解的目的是提供代码生成工具来使用。任何生成的源代码都可以被注解,从而与程序员提供的代码区分开。
2. 用于管理资源的注解
@PostConstruct 和 @PreDestroy注解用于控制对象生命周期的环境中,例如Web容器和应用服务器,标记了这些注解的方法应该在对象被构建之后或移除之前紧接着调用。
@Resource注解用于资源注入。用于web容器环境。(和spring框架中的@Autowired功能类似)
3.元注解
@Target 元注解可以应用于一个注解,以限制该注解可以应用到那些目标上。
元素类型 | 注解适用场合 |
---|---|
ANNOTATION_TYPE | 注解类型声明(用于注解类上) |
PACKAGE | 包 |
TYPE | 类(包括enum)及接口(包括注解类型) |
METHOD | 方法 |
CONSTRUCTOR | 构造器 |
FIELD | 成员变量(包括enum常量) |
PARAMETER | 方法或构造器参数 |
LOCAL_VARIABLE | 局部变量 |
TYPE_PARAMETER | 类参数声明,例如AnnoTest<@AnnoStu T>,@AnnoStu注解被TYPE_PARAMETER修饰,@since 1.8 |
TYPE_USE | 和Type功能一样,@since 1.8 |
@Retention 元注解用于指定一条注解的保留规则(生命周期)。
保留规则 | 描述 |
---|---|
SOURCE | 不包括在类文件中的注解 |
CLASS | 包括在类文件中的注解,但虚拟机不需要将他们载入(默认值) |
RUNTIME | 包括在类文件中的注解,并由虚拟机载入,通过反射API可获得他们 |
@Documented元注解为像Javadoc这样的归档工具提供一些提示。
@Inherited 元注解只能用于对类的注解,如果一个类具有继承注解,那么他的所有子类都自动具有同样的注解
参考资料:java核心技术 卷二(高级特性) ->第10章->标准注解