`

(三) 标准注解

阅读更多

.标准注解
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中三种标准注解和四种元注解.pdf

    Java提供了三种标准注解和四种元注解,使得注解的使用更加灵活和具有针对性。 **三种标准注解** 1. **@Override** - 这个注解用于标记一个方法,表明这个方法是重写其父类中的方法。在编译时,如果被标记的方法...

    spring3注解详细

    @Resource 是 JSR-250 标准注解,推荐使用它来替代 Spring 专有的 @Autowired。@Resource 默认按照 Bean 的名字(byName)进行注入,而 @Autowired 默认按照类型(byType)进行注入。@Resource 的 name 和 type 属性可以...

    java注解jar包

    Java标准库中包含了一些内置注解,如@Override、@Deprecated和@SuppressWarnings等,它们分别用于标记重写父类方法、标记过时的代码以及抑制警告信息。 注解的使用通常分为三个步骤:定义、处理和使用。定义注解...

    Java自定义注解实例

    2. **预定义注解**: Java标准库提供了若干预定义注解,如`@Override`、`@Deprecated`、`@ SuppressWarnings`等,用于标记过载、弃用和警告控制。 3. **元注解**: 元注解是用于注解其他注解的注解,如`@Retention`、...

    Java Annotation注解技术

    6. **标准注解**:Java预定义的一些注解,如`@Override`(标记重写的方法)、`@Deprecated`(标记已废弃的API)和`@SuppressWarnings`(抑制编译警告)。 ### Annotation的工作原理 当定义了一个注解类型,开发者...

    《疯狂Java讲义》第三版注解处理器代码(下载需要配合博客,不建议直接下载)

    《疯狂Java讲义》第三版中的注解处理器代码是一份重要的学习资源,它与作者的博客文章紧密关联,用于深入理解Java的注解处理器技术。注解处理器是Java平台的一个强大特性,允许开发者在编译期间自定义处理元数据,即...

    Spring注解收集1

    - **定义**:`@Resource`注解也是用于自动装配bean的,但它来自于J2EE标准,不仅可以在Spring框架中使用,还可以在其他支持JSR-250规范的容器中使用。 - **示例**: ```java @Resource(name = "beanName") ...

    注解(最全最详细的注解描述).zip

    - **预定义注解**:Java标准库提供了一些预定义注解,如@Override、@Deprecated、@ SuppressWarnings等。 - **自定义注解**:开发者可以根据需求创建自己的注解,定义注解的属性和解析逻辑。 3. **注解的处理** ...

    java注解深入理解

    Java标准库提供了许多内置注解,如`@Deprecated`(表示某个API已过时)和`@ SuppressWarnings`(抑制编译器警告)。 注解的分类主要有三种: 1. **保留注解**:这些注解在编译时被处理,并且不会在字节码中保留。...

    java注解使用例子

    其次,Java标准库还提供了一些其他注解,如`@FunctionalInterface`用于表示函数式接口,`@NonNull`表示非空参数等。这些注解可以辅助开发,提高代码的可读性和可维护性。 注解的使用场景广泛,例如: - **编译时...

    cxf接口常用注解doc

    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`: 抑制编译器警告,可以指定...

    运行时注解demo

    首先,注解(Annotation)主要有三种类型:源码保留(Source retention)、编译器保留(Compile-time retention)和运行时保留(Runtime retention)。运行时注解就是指那些在程序运行期间仍然可用的注解,它们的...

    注解+自定义注解+元注解+理解

    Java标准库提供了一些内置的元注解,包括: - `@Retention`:定义注解的生命周期,可以是SOURCE(源码级),CLASS(编译时),或者RUNTIME(运行时)。 - `@Target`:指定注解可以应用到哪些程序元素,如FIELD(字段...

    hibernate _annotation 注解编程

    - **扩展注解**:除了标准的 JPA 注解外,Hibernate 还提供了一些额外的注解来增强功能,例如: - **@Entity**:用于标记实体类。 - **@Identifier**:用于定义标识符生成策略。 - **@Property**:用于指定属性...

    Spring注解注入属性

    2. **`@Resource`**:这是一个由JSR-250标准定义的注解,不仅被Spring支持,也被其他许多框架所支持。`@Resource`注解默认按照名称装配依赖,如果找不到与名称匹配的bean,则会退而求其次,尝试按类型装配。这意味着...

    ANSI+C标准译文与注解.doc

    #### 三、C99标准中的预处理内容 C99是C语言的一个重要版本,相较于早期的标准,它引入了许多新特性。C99标准中关于预处理的部分主要包括以下几点: 1. **宏定义**:宏定义允许用户定义文本替换模板,用于简化代码...

    android&java的注解详解demo

    2. **预定义注解**:Java标准库和Android SDK中包含了许多预定义的注解,如`@Override`, `@Deprecated`, `@NonNull`, `@UiThread`, `@WorkerThread`等,它们在特定场景下有着明确的用途。 三、注解的应用示例 在`...

    spring的Annotation注解.

    `@Resource`注解也是Spring支持的一种依赖注入方式,它来自于JSR-250标准,主要用于EJB容器。在Spring中,`@Resource`可以用来替代`@Autowired`,但它默认按照名称注入,只有当没有找到对应名称的Bean时,才会退而求...

    myEclipse注解自动提示

    这一功能不仅限于标准Java库中的注解,还包括第三方库和框架(如Spring、Hibernate等)中的自定义注解。这使得开发者能够在快速浏览和选择中准确地应用所需的注解,提高了代码的正确性和可读性。 要启用和充分利用`...

Global site tag (gtag.js) - Google Analytics