`
01404421
  • 浏览: 228646 次
  • 性别: Icon_minigender_1
  • 来自: 西安
文章分类
社区版块
存档分类
最新评论

Annotation入门实例,一分钟了解Annotation

阅读更多
Annotation对很多Javaer来说是一个熟悉的名词,我也是,但是今天涉及到此方面的东西,才发现自己对这个新特性知之甚少,从网上看了下资料,自己做了个例子,才逐渐明白,例子贴出来方便其他入门者参考。高手就不用看了,只适用于刚接触Annotation者,呵呵,因为我也刚接触。
测试一
1.自定义一个Annotation
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface IdAnnation {
}

@Retention(RetentionPolicy.RUNTIME)这个meta-annotation表示了此类型的 annotation将被虚拟机保留使其能够在运行时通过反射被读取。而@Target(ElementType. FIELD)表示此类型的 annotation只能用于修饰属性。
2.使用Annotation
public class UserPojo {	
	@IdAnnation
	String id;
	String name;
}

3.测试
import java.lang.reflect.Field;
public class Test {
	public static void main(String[] args) throws Exception{
		for(Field f:UserPojo.class.getDeclaredFields()){
			System.out.println(f.getName()+" "+f.isAnnotationPresent(IdAnnation.class) );
		}
	}
}

输出:
id true
name false

注意:如果在定义Annotation时没有加@Retention(RetentionPolicy.RUNTIME),则程序结果为:
id false
name false


测试二:
1.定义Annotation
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface IdAnnation {
	String type();
}

可以看到,我加入了一个方法。注意Annotation中的方法:
Annotation类型的方法定义是独特的、受限制的,方法必须声明为无参数、无异常抛出的。这些方法定义了annotation的成员:方法名成为了成员名,而方法返回值成为了成员的类型。而方法返回值类型必须为primitive类型、Class类型、枚举类型、annotation类型或者由前面类型之一作为元素的一维数组。方法的后面可以使用default和一个默认数值来声明成员的默认值,null不能作为成员默认值,这与我们在非annotation类型中定义方法有很大不同。
2.使用
public class UserPojo {
	@IdAnnation(type="ttttt")
	String id;
	String name;
}

3.测试
import java.lang.reflect.Field;

public class Test {
	public static void main(String[] args) throws Exception{
		for(Field f:UserPojo.class.getDeclaredFields()){
			System.out.println(f.getName()+" "+f.isAnnotationPresent(IdAnnation.class) );
			if(f.isAnnotationPresent(IdAnnation.class)){
			System.out.println(((IdAnnation)f.getAnnotation(IdAnnation.class)).type());
			}
		}
	}
}

运行输出:
id true
ttttt
name false

也不多说了,大家自己多练练,还有方法声明上的Annotion,特别注意class、Filed、Method的所有方法,这是最java基础和核心的东西,应该熟练掌握。
====================================================
一下是Meta-Annotation类型说明:
Annotation 类型可以被它们自己所标注。Java5.0定义了4个标准的meta-annotation类型,分别是:Target、Retention、Documented、Inherited,它们被用来提供对其它annotation类型作说明。 这些类型和它们所支持的类在java.lang.annotation包中可以找到。
@Target的用法:指示注释类型所适用的程序元素的种类。如果注释类型声明中不存在 Target 元注释,则声明的类型可以用在任一程序元素上。如果存在这样的元注释,则编译器强制实施指定的使用限制。
ElementType.ANNOTATION_TYPE 应用于注释类型声明
ElementType.CONSTRUCTOR 构造方法声明
ElementType.FIELD 应用于字段声明(包括枚举常量)
ElementType.LOCAL_VARIABLE 应用于局部变量声明
ElementType.METHOD 应用于方法声明
ElementType.PACKAGE 应用于包声明
ElementType.PARAMETER 应用于参数声明
ElementType.TYPE 应用于类、接口(包括注释类型)或枚举声明
----------------------------------------------
@Retention的用法:指示注释类型的注释要保留多久。如果注释类型声明中不存在 Retention 注释,则保留策略默认为 RetentionPolicy.CLASS。
RetentionPolicy.CLASS 编译器将把注释记录在类文件中,但在运行时 VM 不需要保留注释
RetentionPolicy.RUNTIME 编译器将把注释记录在类文件中,在运行时 VM 将保留注释,因此可以反射性地读取
RetentionPolicy.SOURCE 编译器要丢弃的注释
-----------------------------------------------
@Documented的用法:指示某一类型的注释将通过 javadoc 和类似的默认工具进行文档化。应使用此类型来注释这些类型的声明:其注释会影响由其客户端注释的元素的使用。如果类型声明是用 Documented 来注释的,则其注释将成为注释元素的公共 API 的一部分。Documented是一个没有成员的注释。
------------------------------------------------
@Inherited的用法:指示注释类型自动被子类继承。 Inherited也是一个没有成员的注释。
注意,如果使用@Inherited注释类以外的任何事物都是无效的。还要注意,此元注释仅对从超类继承注释有效;对已实现接口的注释无效。
5
0
分享到:
评论
2 楼 droiyan 2012-09-18  
简单明了. 另外有篇英文说Annotation说得特别好 -     http://www.javabeat.net/2007/08/annotations-in-java-5-0/
1 楼 java-lxm 2011-09-19  
if(f.isAnnotationPresent(IdAnnation.class)){ 
            System.out.println(((IdAnnation)f.getAnnotation(IdAnnation.class)).type()); 
            }
你这里都没报错?String类型怎么转换为了IdAnnation呢

相关推荐

    annotationProcessor实例demo

    在Java开发中,`AnnotationProcessor` 是一个强大的工具,它允许开发者在编译期间自动处理源代码,根据注解(Annotation)生成额外的类或修改已有类。这个过程被称为注解处理,是Java编译器的一部分,可以在不需人工...

    Android Annotation 安卓注解实例

    在Android开发中,注解(Annotation)是一种强大的工具,它允许开发者在代码中添加元数据,这些元数据不直接影响程序的执行,但可以被编译器或运行时库用来生成额外的代码、验证代码或者执行其他操作。Android ...

    Hibernate Annotation入门

    这就是一个基本的Hibernate Annotation入门示例。通过这种方式,我们可以更方便地管理数据库操作,减少与数据库相关的代码量。同时,由于注解是类型安全的,因此可以降低因配置错误导致的问题。 在实际开发中,你还...

    java annotation 实例

    Java注解(Annotation)是Java语言提供的一种元数据机制,用于在代码中插入额外的信息,这些信息可以被编译器或运行时环境读取。它们主要用于简化代码的维护、提高可读性,以及实现编译时和运行时的检查。在本实例中...

    Spring MVC入门实例

    我们的入门实例名为 "HelloWeb",它将展示如何创建一个简单的 "Hello, World!" 页面。 1. 创建一个名为 `HelloController` 的 Java 类,使用 `@Controller` 注解标记为 Spring MVC 控制器,并定义一个返回 "Hello, ...

    安卓Annotation实例

    在Android开发中,Annotation(注解)是一种元数据,它提供了在不改变代码执行逻辑的情况下,向编译器或运行时环境提供额外信息的方式。Annotation不仅有助于代码的自动生成,还可以用于编译时检查和运行时处理。在...

    spring 2.0使用AOP实例(基于Annotation的配置方式)

    以上就是Spring 2.0中使用AOP的一个基本实例,基于注解的配置方式使得AOP的使用更加直观和简洁。在实际开发中,我们可以根据需求灵活地定义切面和通知,以实现各种横切关注点的功能。 通过阅读提供的压缩包中的`src...

    Java Annotation入门.doc

    Java 注解(Annotation)是Java 5.0版本引入的一种元数据机制,它为代码提供了额外的信息,这些信息可以被编译器、JVM或工具用来执行特定的任务,如代码分析、验证、生成代码等。本文主要介绍了Java注解的基本概念、...

    Spring IOC Annotation 注入 学习实例

    在实际项目中,我们可以通过配置`@Configuration`类来声明Bean,使用`@Bean`方法返回一个Bean实例。这种方式结合`@Autowired`,可以实现更加灵活的依赖注入。 在`IOC_Project`这个压缩包文件中,很可能是包含了一个...

    JavaAnnotation实例.docx

    ### Java Annotation 实例详解 #### 一、引言 在现代软件开发中,尤其是Java领域,`Annotation`已经成为一种非常重要的编程技术。它不仅能够帮助开发者简化代码编写过程,还能提高程序的可读性和可维护性。本文将...

    Java Annotation的讲解和例子

    Java 注解(Annotation)是Java语言的一个重要特性,它为代码提供元数据,即关于代码的信息,但这些信息不直接影响程序的运行。注解在Java中主要用于编译器检查、运行时处理、框架生成元数据等场景。本篇将深入探讨...

    annotation插件配置方法与实例

    Sun公司的 Annotation Processing Tool(APT)是早期处理注解的一种工具,而"annotation插件配置方法与实例"则涉及到如何利用插件来更高效地管理和利用注解。 注解本身并不直接执行任何操作,它们只是提供一种方式...

    Spring Annotation简介一

    【Spring Annotation简介一】 在Java开发领域,Spring框架以其强大的功能和灵活性深受广大开发者喜爱。Spring Annotation是Spring框架中的一个重要特性,它极大地简化了配置,提高了代码的可读性和可维护性。这篇...

    Annotation手册

    Annotation是Java语言中的一种特性,它为程序元素(如包、类、方法、变量等)提供了附加信息。这些信息可以是元数据,用于编译器、工具或运行时系统使用,但不会直接影响程序的执行。在Java中,Annotation表现为一种...

    jakarta.annotation-api-1.3.5-API文档-中文版.zip

    赠送jar包:jakarta.annotation-api-1.3.5.jar; 赠送原API文档:jakarta.annotation-api-1.3.5-javadoc.jar; 赠送源代码:jakarta.annotation-api-1.3.5-sources.jar; 赠送Maven依赖信息文件:jakarta.annotation...

    Spring boot 入门实例

    本篇文章将深入探讨Spring Boot的基础概念,如何设置项目环境,以及如何构建一个简单的入门实例。 ### 一、Spring Boot核心特性 1. **起步依赖(Starter Dependency)**:Spring Boot通过“起步依赖”提供了一种...

Global site tag (gtag.js) - Google Analytics