首页 > 编程知识 正文

java开发中的注解自定义详解,自定义注解使用场景

时间:2023-05-03 14:33:08 阅读:33322 作者:3088

Java注释提供有关代码的信息,但不直接影响注释的代码内容。 在本教程中,您将学习如何评论Java、自定义注释、使用注释以及通过反射分析注释。

java1.5引入了注释,现在许多Java框架都使用大量注释,如Hibernate、Jersey和Spring。 注释作为程序的元数据嵌入到程序中。 注释可以用几种分析工具或编译工具进行分析。 注释也可以在编译或运行时声明为工作。

在使用注释之前,程序源数据通过java注释和javadoc,但注释提供的功能远远超过这些注释。 注释不仅在元数据中起作用,而且在程序运行时起作用,注释解释器可以通过注释来确定程序的执行顺序。 例如,Jersey webservice会将名为**PATH**注释的URI字符串添加到方法中。 在程序运行时,jerser解释器决定调用方法给定的URI。

创建Java自定义注释

创建自定义注释类似于创建接口,但注释的接口关键字必须以@符号开头。 可以声明评论的方法。 让我们先看看评论的例子。 然后,我会研究他的特性。

1 package com.journal dev.annotations; 2

3 import Java.lang.annotation.documented; 4导入Java.lang.annotation.element type; 5 import Java.lang.annotation.inherited; 6 import Java.lang.annotation.retention; 7导入Java.lang.annotation.retention policy; 8 import Java.lang.annotation.target; 9

10 @ documented 11 @ target (element type.method ) 12@inherited13@retention (保留策略. runtime ) 14公共@ interited 17 int revision () default 1; 18字符串注释(; 19 }

注释方法不能有参数;

注释方法的返回类型仅限于基本类型、字符串、枚举、注释或这些类型的数组。

注释方法有默认值;

注释本身可以包含元注释,元注释用于其他注释。

这里有四种元评论。

1. @Documented ——表示具有此注释的元素可以使用javadoc等工具进行文档记录。 此类型必须用于影响客户使用带注释的元素声明的类型。 如果使用Documented对声明进行评论,此类型的评论将用作已标记流程成员的公共API。

2. @Target——显示了这种类型的注释可以注释的进程元素的范围。 元注释可以是TYPE、METHOD、CONSTRUCTOR和FIELD等值。 如果看不到Target元注释,则定义的注释可以应用于程序中的任何元素。

3. @Inherited——表示注释类型将自动继承。 如果用户在当前类中查询此元注释类型,并且当前类的声明中不包含此元注释类型,则还会自动查询当前类的父类中是否存在Inherited元注释。 此操作将重复执行,以确定是否找到了标记类型,或者是否已查询到顶级父类。

4.@Retention——显示了此Annotation保留的时间。 保留策略取SOURCE、CLASS、RUNTIME的值。

Java内置注释

Java有三种内置注释。

1 .如果要复盖1. @Override——父类的方法,则必须使用此注释通知编译器要复盖该方法。 这样,当删除或修改父类中的方法时,编译器将显示错误消息。

2. @Deprecated——如果希望编译器知道某些方法不被推荐,则必须使用此注释。 Java建议在javadoc中使用此注释。 应提供不推荐这种方法的理由和备选办法。

3. @SuppressWarnings——这只是指示编译器忽略特定的警告信息,例如,在通用类型中使用本机数据类型。 其保留策略为SOURCE (译者注:在源文件中有效),将被编译器放弃。

让我们看一下内置于java中的注释的示例。 请参考前面的自定义注释。

1 package com.journal dev.annotations; 2

3 import Java.io.file not found exception; 4 importjava.util.ArrayList; 5 importjava.util.List; 6

7 publicclassannotationexample {8}

9 publicstaticvoidmain (字符串[ ] args ) {10 }11

12 @Ove

rride13 @MethodInfo(author = 'Pankaj', comments = 'Main method', date = 'Nov 17 2012', revision = 1)14 publicString toString() {15 return 'Overriden toString method';16 }17

18 @Deprecated19 @MethodInfo(comments = 'deprecated method', date = 'Nov 17 2012')20 public static voidoldMethod() {21 System.out.println('old method, don't use it.');

22 }23

24 @SuppressWarnings({ 'unchecked', 'deprecation'})25 @MethodInfo(author = 'Pankaj', comments = 'Main method', date = 'Nov 17 2012', revision = 10)26 public static void genericsTest() throwsFileNotFoundException {27 List l = newArrayList();28 l.add('abc');29 oldMethod();30 }31

32 }

相信这个例子可以不言自明并能展示在不同场景下的应用。

Java注解解析

我们将使用反射技术来解析java类的注解。那么注解的RetentionPolicy应该设置为RUNTIME否则java类的注解信息在执行过程中将不可用那么我们也不能从中得到任何和注解有关的数据。

1 packagecom.journaldev.annotations;2

3 importjava.lang.annotation.Annotation;4 importjava.lang.reflect.Method;5

6 public classAnnotationParsing {7

8 public static voidmain(String[] args) {9 try{10 for (Method method : AnnotationParsing.class

11 .getClassLoader()12 .loadClass(('com.journaldev.annotations.AnnotationExample'))13 .getMethods()) {14 //checks if MethodInfo annotation is present for the method

15 if (method.isAnnotationPresent(com.journaldev.annotations.MethodInfo.class)) {16 try{17 //iterates all the annotations available in the method

18 for(Annotation anno : method.getDeclaredAnnotations()) {19 System.out.println('Annotation in Method ''+ method + '' : ' +anno);20 }21 MethodInfo methodAnno = method.getAnnotation(MethodInfo.class);22 if (methodAnno.revision() == 1) {23 System.out.println('Method with revision no 1 = '+method);24 }25

26 } catch(Throwable ex) {27 ex.printStackTrace();28 }29 }30 }31 } catch (SecurityException |ClassNotFoundException e) {32 e.printStackTrace();33 }34 }35

36 }

运行上面程序将输出:

1 Annotation in Method 'public java.lang.String com.journaldev.annotations.AnnotationExample.toString()' : @com.journaldev.annotations.MethodInfo(author=Pankaj, revision=1, comments=Main method, date=Nov 17 2012)2

3 Method with revision no 1 = publicjava.lang.String com.journaldev.annotations.AnnotationExample.toString()4

5 Annotation in Method 'public static void com.journaldev.annotations.AnnotationExample.oldMethod()': @java.lang.Deprecated()6

7 Annotation in Method 'public static void com.journaldev.annotations.AnnotationExample.oldMethod()' : @com.journaldev.annotations.MethodInfo(author=Pankaj, revision=1, comments=deprecated method, date=Nov 17 2012)8

9 Method with revision no 1 = public static voidcom.journaldev.annotations.AnnotationExample.oldMethod()10

11 Annotation in Method 'public static void com.journaldev.annotations.AnnotationExample.genericsTest() throws java.io.FileNotFoundException' : @com.journaldev.annotations.MethodInfo(author=Pankaj, revision=10, comments=Main method, date=Nov 17 2012)

这就是该教程的全部内容,希望你可以从中学到些东西。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。