`

JDK 5 Annotation\注解\注释\自定义注解

 
阅读更多

作者:赵磊

博客:http://elf8848.iteye.com

 

自定义注解示例

---------------------------------------------

@Transactional  注解示例

 

package org.springframework.transaction.annotation;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import org.springframework.transaction.TransactionDefinition;

@Target({ElementType.METHOD, ElementType.TYPE})//可以作用在类上和方法上
@Retention(RetentionPolicy.RUNTIME)//可以通过反射读取注解
@Inherited//可以被子类继承
@Documented//javadoc生成文件档时,包含本注解信息
public @interface Transactional {
	String value() default "";//使用时没有指定key,值默认赋给value,如:Transactional("abc")
	Propagation propagation() default Propagation.REQUIRED;
	Isolation isolation() default Isolation.DEFAULT;
	int timeout() default TransactionDefinition.TIMEOUT_DEFAULT;
	boolean readOnly() default false;
	Class<? extends Throwable>[] rollbackFor() default {};
	String[] rollbackForClassName() default {};
	Class<? extends Throwable>[] noRollbackFor() default {};
	String[] noRollbackForClassName() default {};
}
 

 

 

J2SE5.0为注解单独提供了4种注解

---------------------------------------------

它们是Target、Retention、Documented和Inherited。

可以在自定义注解时使用这4个注解。

 

@Inherited

---------------------------------------------

继承是java主要的特性之一。在类中的protected和public成员都将会被子类继承,但是父类的注解会不会被子类继承呢?

很遗憾的告诉大家,在默认的情况下,父类的注解并不会被子类继承。如果要让这个注解可以被继承,就必须在定义注解时在源码上加上@Inherited注解。 

 

自大定义一个MyAnnotation注解
@Inherited
@interface MyAnnotation { }

使用MyAnnotation注解
@MyAnnotation
public class ParentClass {}

子类继承父类
public class ChildClass extends ParentClass { }

 

在以上代码中ChildClass和ParentClass一样都已被MyAnnotation注解了。 

 

@Retention 

---------------------------------------------

成功通过反射读取类上或方法上的注解,是有前提的--要使用@Retention,就是设置注解是否保存在class文件中。

下面的代码是Retention的详细用法。 

 

@Retention(RetentionPolicy.SOURCE)
@interface MyAnnotation1 { }
//作用是不将注解保存在class文件中,也就是说象“//”一样在编译时被过滤掉了。

@Retention(RetentionPolicy.CLASS)
@interface MyAnnotation2 {}
//作用是只将注解保存在class文件中,而使用反射读取注解时忽略这些注解。

@Retention(RetentionPolicy.RUNTIME)
@interface MyAnnotation3 {}
//作用是即将注解保存在class文件中,也可以通过反射读取注解。这也是最常用的值 
 

 

 

@Target

---------------------------------------------

标识自定义注解 可以作用于 类上、方法上、成员变量上、构造方法、其它...

 

@Documented 

---------------------------------------------

在默认的情况下在使用javadoc自动生成文档时,注解将被忽略掉。如果想在文档中也包含注解,必须使用Documented为文档注解。 

 

如何读取注解--类上的注解

---------------------------------------------

 

//取得类上的指定的注解
Annotation annotation = 类.class.getAnnotation(MyAnnotation.class);

//取得类上的所有注解,包括继承的注解。
Annotation[] annotations = 类.class.getAnnotations();

//取当前类上的所有的注解,不包括继承的
Annotation[] annotations = 类.class.getDeclaredAnnotations();
 

 

如何读取注解--方法上的注解

---------------------------------------------

 

//取得方法上的指定的注解
Method m=?
Annotation annotation = m.getAnnotation(MyAnnotation.class);

//取得方法上的所有注解,包括继承的注解。
Annotation[] annotations = m.getAnnotations();

//取当前方法上的所有的注解,不包括继承的
Annotation[] annotations = m.getDeclaredAnnotations();
  

注:要想使用反射得到注解信息,这个注解在定义时源码中必须使用

@Retention(RetentionPolicy.RUNTIME)进行注解。

 

 

分享到:
评论
4 楼 hc345443294 2014-09-23  
不好意思,随便点了几下这个富文本编辑器,就回复这那样子了。。。
3 楼 hc345443294 2014-09-23  
[color=red][img][
/img][
[img][b][i][u]
引用
[list]
[*]
引用
[/list][/u][/i][/b][/img]
||||||||
|||||||
|||||||
||||||
||||||
|||||
|||||
||||
||||
|||
|||
||
||
|
|
/color]
2 楼 jhlangfeng 2013-05-23  
1 楼 jhlangfeng 2013-05-23  
[flash=200,200][url][img][list]
[*]
引用
[u][i][/i][/u]
[/list][/img][/url][/flash]

相关推荐

    java Annotation 注解

    Java Annotation,也称为注解,是Java编程语言中的一种元数据机制,自JDK 5.0开始引入。注解提供了在源代码中嵌入元数据的能力,这些元数据可以被编译器、构建工具或者运行时环境用来处理代码。它们在代码中看起来...

    jdk注释讲解

    本文将从JDK源注释出发,深入解析三种核心注释类型:`@SuppressWarnings`、`@Deprecated`以及`@Override`,并探讨自定义注解的创建与应用。 #### 1. `@SuppressWarnings` `@SuppressWarnings`注解用于抑制编译器的...

    java1.5 annotation注释源代码

    Java 1.5 引入了一种新的元编程机制——注解(Annotation),极大地增强了代码的可读性和可维护性。注解是一种在代码中添加元数据的方式,它允许程序员在源代码上添加一些信息,这些信息可以被编译器或运行时环境...

    深入浅出Java注解(注解概述+注解的本质+反射注解信息+元注解+属性的数据类型及特别的属性:value和数组)

    分类大致分为三类:自定义注解、JDK 内置注解、还有第三方框架提供的注解。自定义注解就是我们自己写的注解,而 JDK 内置注解则包括 `@Override`、`@Deprecated` 等。第三方框架定义的注解则包括 SpringMVC 的 `@...

    JDK1.5 注释语法(Annotations)新鲜试用

    在Java编程语言中,JDK 1.5引入了一项重要的新特性——注释(Annotations),这是一种元数据,用于提供程序元素(如类、方法、变量等)的附加信息。这些信息可以被编译器、IDE或其他工具用来验证代码、生成代码、...

    Java注解编程1

    1. 自定义注解语法:自定义注解的成员变量类型有限制,只能是原始类型、String、Class、Annotation和枚举。可以设置默认值,若只有一个成员,推荐使用`value()`方法。注解成员必须无参且无异常声明。 2. 元注解应用...

    北京圣思园 Annotation pdf文档

    实际上,自定义注解类型自动继承了java.lang.annotation.Annotation接口,这是所有注解的最终接口。在定义注解时,不能继承其他注解类型或接口。自定义注解的成员变量可以通过默认值来初始化,其中使用“default”...

    吴天雄-Java注解及动态性详解.doc

    Java注解,也称为Annotation,是自JDK 5.0版本起引入的一种元数据机制,它为程序提供了额外的信息,这些信息可以在编译时或运行时被解析和使用。元数据是描述数据的数据,注解就是一种特殊的数据类型,可以用于修饰...

    注解是什么1

    Java注解(Annotation)是自JDK5开始引入的一种元数据机制,它为代码提供了额外的信息,这些信息可以被编译器、IDE工具或运行时环境读取并执行相应的处理。注解并不是为了人类阅读,而是为了程序理解和处理。尽管...

    Demo利用APT处理源文件中注解信息

    在Java开发中,注解(Annotation)是一种元数据,它提供了在代码中嵌入信息的方式,这些信息可以被编译器或运行时环境用来执行各种任务。本Demo着重讲解如何利用 Annotation Processing Tool(APT) 在编译期间处理...

    Java注解学习讲义.docx

    Java注解,也称为注释或标注,是自JDK 1.5版本引入的一种元数据机制,旨在增强代码的可读性和可维护性。它们能够应用于包、类、接口、字段、方法参数以及局部变量等多个层面,为代码提供额外的信息。注解的主要功能...

    java注解详解[文].pdf

    Java 注解(Annotation)是 JDK 5.0 及以后版本引入的一个特性。它是一个新的类型,与接口类似,位于同一个层次,称为 Java 的一个类型(TYPE)。注解可以声明在包、类、字段、方法、局部变量、方法参数等的前面,...

    全面解析Java注解

     我们有必要对JDK 5.0新增的注解(Annotation)技术进行简单的学习,因为Spring 支持@AspectJ,而@AspectJ本身是基于JDK 5.0的注解技术。所以学习JDK 5.0的注解知识有助于我们更好地理解和掌握Spring的AOP技术。 ...

    14、JavaSE:注解和反射.pdf

    Java注解(Annotation)是自JDK 5.0版本起引入的一种元数据,它为程序提供了附加信息,但并不直接影响程序的运行。注解的主要目的是为了帮助编译器、构建工具、IDE或其他软件工具更好地理解和处理代码。注解与普通的...

    注解与反射高效开发法.pdf

    Java注解在JDK 5.0版本被引入,它允许开发者为程序元素(如类、方法、变量等)添加注释信息,而这些信息将被编译器或者其他工具使用。注解通过使用@interface关键字来声明。元注解是用于注解注解的注解,常见的元...

    Java基础-注解和反射

    从JDK5开始,Java引入了一个重要的特性——元数据支持,即注解。这是一项强大的功能,它允许开发者在不改变原有代码逻辑的情况下向源代码中添加额外的信息。注解在代码中表现为特殊的标记,这些标记可以在编译阶段、...

    想自己写框架?不了解Java注解(Annotation)机制可不行,来跟我一起通过源码深入Java注解机制

    无论是在JDK还是框架中,注解都是很重要的一部分,我们使用过很多注解,但是你有真正去了解过他的实现原理么?你有去自己写过注解么? 一、相关 注解(Annotation),也叫元数据。一种代码级别的说明。它是JDK1.5及...

Global site tag (gtag.js) - Google Analytics