`

自定义以及使用Annotation

阅读更多

1. 什么是Annotation

Annotation是元数据(metadata)的一种格式,它提供了关于程序但是却与程序本身无关的数据。并且,注解与被注解的代码并没有直接的关系。(译自于Java Tutorial)

 

2. Annotation的作用

  • Information for the compiler --注解可以被编译器用来探测错误或者压制警告。
  • Compile-time and deployment-time processing -- 软件工具可以运行注解的信息来生成代码,XML 文件等等。

  • Runtime processing -- 一些注解还可以在运行期来检测。

其实,简单的说,Annotation就是一种标识符,然后通过这种特殊的标识符可以在程序的不同时期(编译器或运行期)做一些特殊的处理,这样以这种很优美的方式来达到自己想要的效果。

 

3. Annotation的分类

3.1 Meta-Annotations

这类注解主要是至以下四个:@Documented  @Retention  @Target @Inherited,这是JDK定义好的,主要是用来使用在注解上,用来对注解进行描述的注解。

3.2  Maker Annotation

这类注解主要是用来做一个声明,这是一类特殊的注解,他们没有成员(members)

 

这是目前搜集到的两类,其他的以后将会继续的进行补充。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

也请各位DN指教

 

4. 自定义Annotation

4.1 一个非常简单的demo

这一部分的内容在网上有大量的资料,下面是一个最简单的Annotation:

 

public @interface Author {
	String name() default "";
}

 

 

@Retention ,指示注释类型的注释要保留多久。如果注释类型声明中不存在 Retention 注释,则保留策略默认为 RetentionPolicy.CLASS。 其取值为参考RetentionPolicy

@Target,指示注释类型所适用的程序元素的种类。如果注释类型声明中不存在 Target 元注释,则声明的类型可以用在任一程序元素上。如果存在这样的元注释,则编译器强制实施指定的使用限制。其驱逐参考:ElementType

 

4.2 相对复杂的demo

 

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Test {
   Class expected();
}

 这里声明了@Target 和 @Retention,这样就不能随意去在不同的时期和元素上使用了,只能够被使用在方法上,并且只能够保留到运行期。

 

 

5. 使用自定义的Annotation

上面也说了,自定义个Annotation这样的例子在网上很多,很多比这里的例子都还要好,而且,自定义Annotation也是非常简单的。不过对于使用自定义的Annotation的例子就不多了,而且也是相对来说比较复杂。

其实,使用自定义的Annotation主要用到的就是Java的反射机制来获取到Annotation的信息或者属性等等,然后自己再根据获取到的有关信息后进行处理。

下面是一个完整的自定义Annotation,使用,解析的全部代码:

 

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.lang.reflect.Method;

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@interface Test {
   String info() default "";
}

class Annotated {
   @Test(info = "AWESOME")
   public void foo(String myParam) {
      System.out.println("This is " + myParam);
   }
}

class TestAnnotationParser {
   public void parse(Class clazz) throws Exception {
      Method[] methods = clazz.getMethods();
      for (Method method : methods) {
         if (method.isAnnotationPresent(Test.class)) {
            Test test = method.getAnnotation(Test.class);
            String info = test.info();
            if ("AWESOME".equals(info)) {
                System.out.println("info is awesome!");
                // try to invoke the method with param
                method.invoke(
                   Annotated.class.newInstance(),
                   info
                );
            }
         }
      }
   }
}

public class Demo {
   public static void main(String[] args) throws Exception {
      TestAnnotationParser parser = new TestAnnotationParser();
      parser.parse(Annotated.class);
   }
}

 此部分主要参考与:http://isagoksu.com/2009/creating-custom-annotations-and-making-use-of-them/

 

 

6. 总结

对于Annotation的定义比较简单易学,但是对于具体的使用的话,则需要根据具体的应用需求场景来确定注解的定义以及解析的时机。

 

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    自定义的Annotation

    总结一下,自定义Annotation的关键步骤包括:创建一个遵循`MKAnnotation`协议的类,重写`mapView(_:viewFor:)`以定制视图,处理点击事件,以及将Annotation添加到地图上。通过这些步骤,开发者可以自由地在地图上...

    Java自定义注解Annotation的使用

    ### Java自定义注解Annotation的使用 #### 1. 前言 自从JDK 1.5引入了注解这一特性以来,它已经成为Java开发中的一个重要组成部分。注解最初是为了推动EJB 3.0的普及和发展而设计的,其目的是减少配置文件的使用,...

    自定义Annotation例子

    在使用了自定义Annotation的代码中,我们通常需要对其进行处理,这可以通过两种方式完成:编译时处理(通过注解处理器,`javax.annotation.processing.Processor`)和运行时处理(通过反射,`java.lang.reflect`)。...

    2个案例 自定义annotation进行查询对象封装 itext 打印案例

    在IT行业中,自定义注解(Annotation)是Java编程语言中的一个重要特性,它允许程序员在代码中嵌入元数据,增强了代码的可读性和可维护性。这些元数据可以被编译器或运行时环境用来执行特定的任务,例如代码分析、...

    spring中自定义注解(annotation)与AOP中获取注解

    在Spring框架中,自定义注解(Annotation)和AOP(面向切面编程)的结合使用,极大地增强了代码的可读性和可维护性。本文将深入探讨如何在Spring中创建自定义注解以及如何在AOP中有效地获取并利用这些注解。 首先,...

    自定义annotationProcessor

    在本主题中,我们将深入探讨如何创建和使用自定义的`annotationProcessor`,以及它在IDEA中的应用。 首先,让我们了解什么是`annotationProcessor`。`annotationProcessor`,也称为注解处理器,是在Java编译过程中...

    自定义注解annotation及用法

    本文将深入探讨自定义注解的创建、使用及其在实际开发中的应用。 ### 1. 自定义注解的定义 自定义注解的定义以`@interface`关键字开始,后面跟着注解的名称。注解的属性通常称为元素,它们可以有默认值。例如,...

    自定义Annotation注解

    本教程将通过一个简单的自定义Annotation注解示例——`CustomAnnotationDemo`,帮助新手了解如何创建和使用自定义注解。 首先,让我们看看如何定义一个自定义注解。在Java中,注解的定义使用`@interface`关键字。...

    Annotation使用手册

    ### Annotation使用手册详解 #### 一、Annotation的基本概念 ...通过掌握 Annotation 的基本概念、语法以及如何创建和使用自定义 Annotation,开发人员可以更有效地利用这一特性来提高代码质量和开发效率。

    Spring MVC Annotation验证的方法

    本文将详细介绍 Spring MVC Annotation验证的方法,包括使用 Spring MVC 自带的 Annotation 验证和自定义 Annotation 验证。 一、Spring MVCAnnotation 验证简介 Spring MVC 框架提供了多种Annotation来实现验证,...

    Annotation技术

    自定义Annotation通过使用`@interface`关键字来创建。 Annotation类型可以包含成员,这些成员通常是没有参数的方法,其返回类型限制为基本类型、字符串、Class、枚举、Annotation或它们的数组。成员可以有默认值。...

    Java自定义注解使用反射获取字段注解

    本文将深入探讨如何通过反射机制来获取自定义注解以及其在字段上的应用。 首先,我们需要了解什么是自定义注解。自定义注解是以`@`开头,后跟自定义的名称。定义一个注解的基本结构如下: ```java import java....

    Annotation手册

    5. **自定义Annotation**:从Java 6.0起,开发者可以创建自己的Annotation类型,定义特定的元信息。这使得开发人员能够创建特定于应用程序的Annotation,用于各种目的,如验证、持久化、事务管理等。 6. **...

    Annotation注解的介绍和使用

    #### 三、自定义Annotation 开发者不仅可以使用Java内置的注解,还可以根据需求自定义注解,以满足特定的应用场景。 ##### 3.1 如何自定义注解 自定义注解通过`@interface`关键字创建,格式如下: ```java ...

    map MKPinAnnotationView自定义(地点标记自定义)

    1. **创建自定义Annotation View** 首先,你需要创建一个继承自`MKPinAnnotationView`的自定义类。在这个类中,你可以重写父类的方法,如`- (void)setupAnnotationView`来初始化你的视图,添加自定义的图像、标签...

    Annotation详细介绍(大全)

    10. **自定义Annotation处理器**: Java提供`javax.annotation.processing.Processor`接口,允许开发者创建自己的Annotation处理器,这些处理器会在编译期间执行,根据找到的特定Annotation做相应的处理,如代码...

    JDK5.0 Java Annotation 介绍(ppt)

    1. **定义和使用**:从 JDK5.0 开始,Java 提供了定义和使用自定义 Annotation 的能力。这包括定义 Annotation 类型的语法、声明 Annotation 的语法,以及读取 Annotation 的 API。Annotation 不直接改变代码的执行...

Global site tag (gtag.js) - Google Analytics