`

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或Java框架中常用的注解及其作用详解_资料.docx

    java或Java框架中常用的注解及其作用详解:Java 注解(Annotation)又称 Java 标注,是 JDK5.0 引入的一种注释机制。 Java 语言中的类、方法、变量、参数和包等都可以被标注。和 Javadoc 不同,Java 标注可以通过...

    全面解析Java注解

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

    Java语言高级部分之注解是什么?

    二、JDK中预定义的一些注解1.@Override2.@Deprecated3.@SuppressWarnings4.@SafeVarargs5.@FunctionalInterface三、自定义注解1.格式2.本质3.属性4.元注解(JDK的元Annotation)4.1.@Target4.2.@Retention4.3.@...

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

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

    maven-annotation-plugin:一个Maven插件,可在编译时处理来自jdk6及更高版本的注释

    一个Maven插件,用于处理jdk8及更高版本的编译时注释。 该插件有助于从Maven使用JDK8提供的集成在Java编译器中的新注释处理 该插件是Maven apt插件的“ alter ego” 文献资料 相关插件 插入 信息 Jboss的eclipse...

    Java枚举类的使用与注解

    方式一:Jdk5.0之前,自定义枚举类 方式二:jdk5.0之后,可以使用enum关键字定义枚举类 三、Enum类的主要方法: 四、使用enum关键字定义的枚举类实现接口的情况 栗子一:实现接口,在enum类中实现抽象方法。 栗子...

    java注解元数据

    定义:注解(Annotation),也叫元数据。一种代码级别的说明。它是JDK5.0及以后版本引入的一个特性,与类、接口、枚举是在同一个层次。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素...

    java注解与反射的基本使用(这一篇就够了!)

    一、注解(Annotation) 1.什么是注解? 相信大家对注解应该并不陌生,在现在信息飞速发展的年代,各种优秀的框架或许都离不开注解的使用,像我们在实现接口一个方法时,也会有@Override注解。注解说白了就是对程序...

    day021-反射和注解笔记和代码.rar

    枚举是一种类,注解(指的是注解Annotation)是一种接口; 每个数组都是 Class字节码类中的一个具体 对象 基本的 Java 类型(boolean、byte、char、short、int、long、float 和 double)和关键字 void 也表示...

    JDK11-annotation-processor-reproducer:Java 11问题的小型复制器

    JDK11注释处理器复制器运行复制器确保JAVA_HOME环境变量指向Java 11安装。 运行应用程序的构建: mvn clean install编译不会通过以下问题: [INFO] --------------------------------------------------------------...

    Java注解Annotation

    当然它也支持自定义Java标注 JDK1.5之后的特征 用于说明程序 一般在框架中使用 格式: @AnnotationName 文档注释: @param @return @Exeception 从根本上是一个注释,不存在代码编译,不会生成对应的.class字节码问题...

    java进阶技术:泛型、反射、注解

    泛型是Java SE 1.5的新特性,好处是在...注解(Annotation)是JDK1.5及以后引入的新特性,与类、接口、枚举是在同一个层次。可声明在包、类、字段、方法、局部变量、方法参数等前面,用来对这些元素进行说明,注释。

    java高级特性,涵盖了多种java常用的一些例子

    Java 注解(Annotation)又称 Java 标注,是 JDK5.0 引入的一种注释机制。 Java 语言中的类、方法、变量、参数和包等都可以被标注。Java标注可以通过反射获取标注内容。在编译器生成类文件时,标注可以被嵌入到字节...

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

    这个Demo演示利用APT处理源文件中注解信息,而不是在运行时用反射处理 需要tools.jar位于jdk_home\lib下请自行拷贝,并修改run.bat中的classpath

    Java版水果管理系统源码-huihe_2020summer:2020假期spring学习,vue留给你们了,有兴趣自己可以看官方文档,中文很

    注解(Annotation)又称 Java 标注,是 JDK5.0 引入的一种注释机制。 Java 语言中的类、方法、变量、参数和包等都可以被标注。 内置的注解 作用在代码的注解是 @Override - 检查该方法是否是重写方法。如果发现其...

    auto-string-formatter:用于Java的字符串格式化库,在编译时通过注释处理生成优化的formatter方法

    auto-string-formatter需要JDK 8(1.8.0_65或更高版本)才能运行注释处理器。 概要 只需使用@AutoStringFormatter和@Format定义一种格式,然后使用它。 package com.github.imasahiro.stringformatter.example ; ...

    resources:Spring 中的链接资源变得容易

    依赖关系主要依赖有: FasterXML 杰克逊 2.5.4 弹簧框架 4.1.5发展在 Intellij 中导入必须安装 Lombok 插件不要忘记在Preferences &gt; Compiler &gt; Annotation processor 中启用注解处理历史该库已从 nemerosa/ontrack ...

    springmybatis

    MyBatis使用简单的XML或注解用于配置和原始映射,将接口和Java的POJOs(Plan Old Java Objects,普通的Java对象)映射成数据库中的记录. orm工具的基本思想 无论是用过的hibernate,mybatis,你都可以法相他们有一个...

Global site tag (gtag.js) - Google Analytics