.标准注解
Java SE在java.lang, java.lang.annotation和javax.annotation包中定义了大量的注解接口。
其中四个是元注解,用于描述注解接口的行为属性,其他的三个是规则接口,可以用它们来注解源代码中的项。
标准注解
注解接口 应用场合 目的
java.lang
Deprecated 全部 将项标记为过时的
SuppressWarnings 除了包和注解之外 阻止某个给定类型的警告信息
Override 方法 检查该方法是否覆盖了某一个类超类方法
javax.annotation
PostConstruct 方法 被标记的方法应该在构造之后被调用
PreDestroy 方法 被标记的方法应该在移除之前被调用
Resource 类、接口、方法、属性 在类或接口上:标记为在一个应用程序在运行时将查找的资源
在方法或属性上:容器将把所请求资源的一个实例注入其中
Resources 类、接口 一个资源数组,即此类用于允许多个资源声明
Generated 全部 用于区分单个文件中用户编写的代码和生成的代码。
java.lang.annotation
Target 注解 指示注释类型所适用的程序元素的种类
Retention 注解 指示注释类型的注释要保留多久
Documented 注解 指示这个注解应该包含在注解项文档中
Inherited 注解 指示注释类型被自动继承
(1)用于编译的注解
java.lang包下 Deprecated、SuppressWarnings、Override 均为用于编译的注解
@Deprecated 注解可以添加到任何不再鼓励使用的项上。所以,当使用一个已过时的项时,编译器将会发出警告。这个注解与Java文档标签@deprecated具有同等功效。
@SuppressWarnings 注解会告知编译器阻止特殊类型的警告信息
例: @SuppressWarnings("unchecked")
@Override 注解只能应用到方法上,表示一个方法声明打算重写超类中的另一个方法声明。如果方法利用此注解类型进行注解但没有重写超类方法,则编译器会生成一条错误消息。
javax.annotation包下 PostConstruct、PreDestroy、Resource、Resources、Generated
其中 Generated 是用于编译的注解
PostConstruct、PreDestroy、Resource、Resources 是用于管理资源的注解
@Generated 注解的目的是提供代码生产工具来使用。任何生成的源代码都可以被注解,从而与程序员提供的代码区分开。
例如,代码编译器可以隐藏生成的代码,或者代码生成器可以移出生成代码的旧版本。每个注解都必须包含一个表示代码生成器的唯一标识符。日期字符串(ISO8601格式)和说明是可选的。
例:
@Generated(value="com.horstmann.beanproperty", date="2008-01-04T12:05:56.235-0700")
(2)用于管理资源的注解
@PostConstruct和@PreDestroy注解用于控制对象生命周期的环境中,例如Web容器和应用服务器。标记了这些注解的方法应该在对象被构建之后,或者在对象被移除之前调用。
@Resource注解用于资源注入。
例如,考虑访问数据库的Web应用。因为数据库访问信息不应该被硬编码到Web应用中,而是应该让Web容器提供某种用户接口,以便设置连接参数和数据库资源的JNDI名字。
例 在这个Web应用中,可以想下面这样引用数据源:
@Resource(name="jdbc/mydb")
private DataSource source;
(3)元注解
java.lang.annotation包下 Target、Retention、Documented、Inherited 均为元注解
@Target 元注解可以应用于一个注解,以限制该注解可以应用到哪些项上
例 @Target([ElementType.TYPE, Element.METHOD])
public @interface BugReport
下表为所有可能的取值情况,它们属于枚举类型ElementType。可以指定任意数量的元素类型,用括号括起来。
@Target注解的元素类型
元素类型 注解使用场合
ANNOTATION_TYPE 注解类型声明
PACKAGE 包
TYPE 类(包括enum)及接口(包括注解类型)
METHOD 方法
CONSTRUCTOR 构造器
FIELD 属性(包括enum常量)
PARAMETER 方法或构造器参数
LOCA_VARIABLE 本地变量
一条没有@Target限制的注解可以应用于任何项上。编译器只检查你是否将一条注解应用到某个允许的项上。如果用于错误的项上,则会导致一个编译器错误。
@Retention 元注解用于指定一条注解应该保留多长时间。下表为所有的取值情况,其默认值是 RetentionPolicy.CLASS
用于@Retention注解的保留策略
保留规则 描述
SOURCE 不包括在类文件中的注解
CLASS 类文件中的注解,但是虚拟机不需要将它们载入
RUNTIME 类文件中的注解,并由虚拟机载入。通过反射API可获得它们
@Documented 元注解为像Java东城这样的文档工作提供了一些提示。文档化的注解应该按照其它一些像protected或static这样用于文档目的的修饰符来处理。其他注解的使用不属于文档范畴。
例 将@ActionListenerFor作为一个文档化注解来声明
@Documented
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface ActionListenerFor
现在每一个已注解方法的文档都含有这条注解,所以如果某个注解是暂时的,就不应该对它们的用法进行归档。
注意:将一个注解应用到它自身上是合法的。例如,@Documented注解被它自身注释为@Documented。因此,用于注解的Javadoc文档表明了它们是否可以文档化。
@Inherited 元注解只能应用于对类的注解。如果一个类具有继承注解,那么它的所有子类都自动具有同样地注解。这使得创建一个与Serializable这样的接口修饰符具有同样的运行方式的注解变得很容易。
实际上@Serializable注解应该比没有任何方法的Serializable修饰符接口更恰当。一个类之所以可以被序列化,是因为存在着对它的成员域进行读写的运行期支持,而不是任何面向对象的设计原理。注解比接口继承更擅长描述这一事实。当然,可序列化接口实在JDB 1.1中产生的,比注解出现的早。
例: 假设定义了一个继承注解@Persistent来致命一个类的对象可以存储到数据库中,那么该持久类的子类就会自动被注解为是持久性的。
@Inherited @Persistent{}
@Persistent class Employee {...}
Class Manager extends Empoyee{...} //also @Persistent
在持久性机制取查找存储在数据库中的对象的时候,它就会探测到Employee对象以及Manage对象的存在。
分享到:
相关推荐
Java提供了三种标准注解和四种元注解,使得注解的使用更加灵活和具有针对性。 **三种标准注解** 1. **@Override** - 这个注解用于标记一个方法,表明这个方法是重写其父类中的方法。在编译时,如果被标记的方法...
@Resource 是 JSR-250 标准注解,推荐使用它来替代 Spring 专有的 @Autowired。@Resource 默认按照 Bean 的名字(byName)进行注入,而 @Autowired 默认按照类型(byType)进行注入。@Resource 的 name 和 type 属性可以...
Java标准库中包含了一些内置注解,如@Override、@Deprecated和@SuppressWarnings等,它们分别用于标记重写父类方法、标记过时的代码以及抑制警告信息。 注解的使用通常分为三个步骤:定义、处理和使用。定义注解...
2. **预定义注解**: Java标准库提供了若干预定义注解,如`@Override`、`@Deprecated`、`@ SuppressWarnings`等,用于标记过载、弃用和警告控制。 3. **元注解**: 元注解是用于注解其他注解的注解,如`@Retention`、...
6. **标准注解**:Java预定义的一些注解,如`@Override`(标记重写的方法)、`@Deprecated`(标记已废弃的API)和`@SuppressWarnings`(抑制编译警告)。 ### Annotation的工作原理 当定义了一个注解类型,开发者...
《疯狂Java讲义》第三版中的注解处理器代码是一份重要的学习资源,它与作者的博客文章紧密关联,用于深入理解Java的注解处理器技术。注解处理器是Java平台的一个强大特性,允许开发者在编译期间自定义处理元数据,即...
- **定义**:`@Resource`注解也是用于自动装配bean的,但它来自于J2EE标准,不仅可以在Spring框架中使用,还可以在其他支持JSR-250规范的容器中使用。 - **示例**: ```java @Resource(name = "beanName") ...
- **预定义注解**:Java标准库提供了一些预定义注解,如@Override、@Deprecated、@ SuppressWarnings等。 - **自定义注解**:开发者可以根据需求创建自己的注解,定义注解的属性和解析逻辑。 3. **注解的处理** ...
Java标准库提供了许多内置注解,如`@Deprecated`(表示某个API已过时)和`@ SuppressWarnings`(抑制编译器警告)。 注解的分类主要有三种: 1. **保留注解**:这些注解在编译时被处理,并且不会在字节码中保留。...
其次,Java标准库还提供了一些其他注解,如`@FunctionalInterface`用于表示函数式接口,`@NonNull`表示非空参数等。这些注解可以辅助开发,提高代码的可读性和可维护性。 注解的使用场景广泛,例如: - **编译时...
JAX-WS (Java API for XML Web Services) 是一种基于XML的Web服务的Java API标准,它允许开发者使用注解来定义与Web服务相关的元数据,从而简化Web服务的开发。JAX-WS支持使用基于JSR 175和JSR 181规范的注解来简化...
Java标准库提供了一些预定义的注解,如: 1. `@Override`: 检查方法是否真正覆盖了超类的方法。 2. `@Deprecated`: 标记不再推荐使用的代码,编译器会发出警告。 3. `@ SuppressWarnings`: 抑制编译器警告,可以指定...
首先,注解(Annotation)主要有三种类型:源码保留(Source retention)、编译器保留(Compile-time retention)和运行时保留(Runtime retention)。运行时注解就是指那些在程序运行期间仍然可用的注解,它们的...
Java标准库提供了一些内置的元注解,包括: - `@Retention`:定义注解的生命周期,可以是SOURCE(源码级),CLASS(编译时),或者RUNTIME(运行时)。 - `@Target`:指定注解可以应用到哪些程序元素,如FIELD(字段...
- **扩展注解**:除了标准的 JPA 注解外,Hibernate 还提供了一些额外的注解来增强功能,例如: - **@Entity**:用于标记实体类。 - **@Identifier**:用于定义标识符生成策略。 - **@Property**:用于指定属性...
2. **`@Resource`**:这是一个由JSR-250标准定义的注解,不仅被Spring支持,也被其他许多框架所支持。`@Resource`注解默认按照名称装配依赖,如果找不到与名称匹配的bean,则会退而求其次,尝试按类型装配。这意味着...
#### 三、C99标准中的预处理内容 C99是C语言的一个重要版本,相较于早期的标准,它引入了许多新特性。C99标准中关于预处理的部分主要包括以下几点: 1. **宏定义**:宏定义允许用户定义文本替换模板,用于简化代码...
2. **预定义注解**:Java标准库和Android SDK中包含了许多预定义的注解,如`@Override`, `@Deprecated`, `@NonNull`, `@UiThread`, `@WorkerThread`等,它们在特定场景下有着明确的用途。 三、注解的应用示例 在`...
`@Resource`注解也是Spring支持的一种依赖注入方式,它来自于JSR-250标准,主要用于EJB容器。在Spring中,`@Resource`可以用来替代`@Autowired`,但它默认按照名称注入,只有当没有找到对应名称的Bean时,才会退而求...
这一功能不仅限于标准Java库中的注解,还包括第三方库和框架(如Spring、Hibernate等)中的自定义注解。这使得开发者能够在快速浏览和选择中准确地应用所需的注解,提高了代码的正确性和可读性。 要启用和充分利用`...