`

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

阅读更多

自定义注解示例

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

@Transactional  注解示例

 

Java代码  收藏代码
  1. package  org.springframework.transaction.annotation;  
  2. import  java.lang.annotation.Documented;  
  3. import  java.lang.annotation.ElementType;  
  4. import  java.lang.annotation.Inherited;  
  5. import  java.lang.annotation.Retention;  
  6. import  java.lang.annotation.RetentionPolicy;  
  7. import  java.lang.annotation.Target;  
  8. import  org.springframework.transaction.TransactionDefinition;  
  9.   
  10. @Target ({ElementType.METHOD, ElementType.TYPE}) //可以作用在类上和方法上   
  11. @Retention (RetentionPolicy.RUNTIME) //可以通过反射读取注解   
  12. @Inherited //可以被子类继承   
  13. @Documented //javadoc生成文件档时,包含本注解信息   
  14. public   @interface  Transactional {  
  15.     String value() default   "" ; //使用时没有指定key,值默认赋给value,如:Transactional("abc")   
  16.     Propagation propagation() default  Propagation.REQUIRED;  
  17.     Isolation isolation() default  Isolation.DEFAULT;  
  18.     int  timeout()  default  TransactionDefinition.TIMEOUT_DEFAULT;  
  19.     boolean  readOnly()  default   false ;  
  20.     Class<? extends  Throwable>[] rollbackFor()  default  {};  
  21.     String[] rollbackForClassName() default  {};  
  22.     Class<? extends  Throwable>[] noRollbackFor()  default  {};  
  23.     String[] noRollbackForClassName() default  {};  
  24. }  
 

 

 

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

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

它们是Target、Retention、Documented和Inherited。

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

 

@Inherited

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

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

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

 

Java代码  收藏代码
  1. 自大定义一个MyAnnotation注解  
  2. @Inherited   
  3. @interface  MyAnnotation { }  
  4.   
  5. 使用MyAnnotation注解  
  6. @MyAnnotation   
  7. public   class  ParentClass {}  
  8.   
  9. 子类继承父类  
  10. public   class  ChildClass  extends  ParentClass { }  

 

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

 

@Retention 

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

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

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

 

Java代码  收藏代码
  1. @Retention (RetentionPolicy.SOURCE)  
  2. @interface  MyAnnotation1 { }  
  3. //作用是不将注解保存在class文件中,也就是说象“//”一样在编译时被过滤掉了。   
  4.   
  5. @Retention (RetentionPolicy.CLASS)  
  6. @interface  MyAnnotation2 {}  
  7. //作用是只将注解保存在class文件中,而使用反射读取注解时忽略这些注解。   
  8.   
  9. @Retention (RetentionPolicy.RUNTIME)  
  10. @interface  MyAnnotation3 {}  
  11. //作用是即将注解保存在class文件中,也可以通过反射读取注解。这也是最常用的值    
 

 

 

@Target

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

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

 

@Documented  

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

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

 

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

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

 

Java代码  收藏代码
  1. //取得类上的指定的注解   
  2. Annotation annotation = 类.class .getAnnotation(MyAnnotation. class );  
  3.   
  4. //取得类上的所有注解,包括继承的注解。   
  5. Annotation[] annotations = 类.class .getAnnotations();  
  6.   
  7. //取当前类上的所有的注解,不包括继承的   
  8. Annotation[] annotations = 类.class .getDeclaredAnnotations();  
 

 

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

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

 

Java代码  收藏代码
  1. //取得方法上的指定的注解   
  2. Method m=?  
  3. Annotation annotation = m.getAnnotation(MyAnnotation.class );  
  4.   
  5. //取得方法上的所有注解,包括继承的注解。   
  6. Annotation[] annotations = m.getAnnotations();  
  7.   
  8. //取当前方法上的所有的注解,不包括继承的   
  9. Annotation[] annotations = m.getDeclaredAnnotations();  
  

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

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

 

分享到:
评论

相关推荐

    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