`
hl756799782
  • 浏览: 77838 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

张龙 Annotation学习笔记2

阅读更多

本集主要讲述@Retention及@Target2个注解,顺带提一下@Documented这个注解

 

1.关于@Retention这个注解

Retention翻译成中文是“保留”的意思,RetentionPolicy是“保留策略”。

简要描述:指示注解类型的注解要保留多久。如果注解类型声明中不存在 Retention 注解,则保留策略默认为  RetentionPolicy.CLASS

每一个Retention都要给他一个RetentionType,RetentionType是一个枚举类型(具体可以查看API文档),它有3种取值:SOURCE,CLASS,RUNTIME,区别如下:

(a)SOURCE:表示该注解只会存在于JAVA源文件中,不会编译到class文件里面去,更不会在运行期通过反射的方式获   取到。

(b)CLASS:表示该注解会随着JAVA源代码一起编译到class文件里面去,但不会在运行期通过反射的方式获取到。

(c)RUNTIME:表示该注解会随着JAVA源代码一起编译到class文件里面去,并且会在运行期通过反射的方式获取到。

 

请看一个示例:

首先定义一个注解:

package com.shengsiyuan.annotation;

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;


//注解也可以修饰注解,该注解修饰下面自定义的注解,通过设定
//RetentionPolicy的值为RUNTIME表示该自定义的注解会被编
//译到CLASS文件当中,而且可以在运行期通过反射的方式获取到(具体请查看一遍API文档,很有必要!)
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation
{
	String hello() default "shengsiyuan";

	String world();
}

然后定义一个类,用这个Annotation去修饰

package com.shengsiyuan.annotation;

@MyAnnotation(hello = "beijing", world = "shanghai")
public class MyTest
{       
        //一个方法可以被多个注解所修饰。
	@MyAnnotation(hello = "tianjin", world = "shangdi")
	@Deprecated
	@SuppressWarnings("unchecked") 
	public void output()
	{
		System.out.println("output something!");
	}
}

 接着定义一个类,并通过反射相关API去获得自定义注解的相关信息

package com.shengsiyuan.annotation;

import java.lang.annotation.Annotation;
import java.lang.reflect.Method;

//该类拿到修饰MyTest里方法的Annotation
public class MyReflection
{
	public static void main(String[] args) throws Exception
	{
		MyTest myTest = new MyTest();
		
		Class<MyTest> c = MyTest.class;
		
		Method method = c.getMethod("output", new Class[]{});
		
                //能够进入到if语句里面来说明MyAnnotation的RetentionPolicy的值为Runtime(为什么请查API文档!)
		if(method.isAnnotationPresent(MyAnnotation.class))
		{
			method.invoke(myTest, new Object[]{});
			
			MyAnnotation myAnnotation = method.getAnnotation(MyAnnotation.class);
			
			String hello = myAnnotation.hello();
			String world = myAnnotation.world();
			
			System.out.println(hello + ", " + world);
		}

		//只会得到Myannotation和Deprecated两个Annotation,因为只有这两个Annotation的RetentionPolicy
                //的值为Runtime,只有RetentionPolicy的值为Runtime才会在运行期通过反射相关API拿到Annotation的相关信息。
		Annotation[] annotations = method.getAnnotations();
		
		for(Annotation annotation : annotations)
		{
			System.out.println(annotation.annotationType().getName());
		}
	}
}

 

2.关于@Target这个注解(建议去读一读API文档,介绍的很详细)

 简要描述:指示注解类型所适用的程序元素的种类。如果注解类型声明中不存在 Target 元注解,则声明的类型可以用在任一程序元素上。

每一个Target都要给他一个ElementType,ElementType是一个枚举类型(具体可以查看API文档),它有8种取值:SOURCE,CLASS,RUNTIME,区别如下:

(a)ANNOTATION_TYPE:表示该注解可以去修饰另外一个注解

(b)COUNSTRUCTOR:表示该注解可以修饰构造方法

(c)FIELD:表示该注解可以修饰成员变量

(d)LOCAL_VARIABLE:表示该注解可以修饰局部变量

(e)METHOD:表示该注解可以修饰普通方法

(f)PACKAGE:表示该注解可以修饰包

(g)PARAMETER:表示该注解可以修饰方法参数

(h)TYPE:表示该注解可以修饰类、接口(包括注解类型)或枚举声明

 

请看示例:

package com.shengsiyuan.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Target;

@Target(ElementType.METHOD)//表示该自定义注解只能用于修饰方法
public @interface MyTarget
{
	String value();
}

接着定义一个类:

package com.shengsiyuan.annotation;

public class MyTargetTest
{
	@MyTarget("hello")
	public void doSomething()
	{
		System.out.println("hello world");
	}
}

 当把该自定义的注解放到方法上面后编译器不报错时,说明我们的实验是成功的(不需要写main方法进行测试)

 

对以上2个注解的总结:Retention与Target都是注解,Retention与RetentionPolicy搭配,Target与ElementType搭配。

 

3.关于@Documented(了解就行)

不多做描述,请看示例:

package com.shengsiyuan.annotation;

import java.lang.annotation.Documented;

@Documented   //当一个注解被@Documented 修饰后表示被该注解修饰的对象(类或方法或其他)在生成JAVA DOC文档时,该注解会被加到修饰的对象的上面
public @interface DocumentedAnnotation
{
	String hello();
}

 然后用该注解去修饰某个方法

package com.shengsiyuan.annotation;

public class DocumentedTest
{
	@DocumentedAnnotation(hello = "welcome")
	public void method()
	{
		System.out.println("hello world");
	}
}

 当对DocumentedTest所在的包或工程生成JAVA DOC文档的时候,会发现自定义的注解会出现在method方法的上面

 

分享到:
评论

相关推荐

    Hibernate Annotation 学习笔记

    《Hibernate Annotation 学习笔记》 在Java的持久化框架中,Hibernate以其强大的功能和易用性成为开发者首选之一。而Hibernate Annotation则是Hibernate提供的一种基于注解的实体映射方式,它极大地简化了传统XML...

    Hibernate -annotation 学习笔记

    【Hibernate - Annotation 学习笔记】 Hibernate 是一个流行的开源Java对象关系映射(ORM)框架,它极大地简化了数据库操作,使得开发人员可以使用面向对象的方式处理数据存储。Annotation是Hibernate提供的一种元...

    Java 5 annotation 学习笔记

    2. 自定义注解: - 自定义注解使用`@interface`关键字定义,例如`@MyAnnotation`。默认情况下,注解有一个名为"value"的属性,可以直接在使用注解时省略属性名。若使用其他名称,则需明确指定属性名和值,如`@...

    Hiberate Annotation学习笔记

    2. **时间类型与@Temporal** - 对于时间类型数据(DATE, TIME, 或 TIMESTAMP),`@Temporal` 注解用于指定存储的精度。例如,`@Temporal(TemporalType.TIME)` 会将 `java.util.Date` 对象存储为数据库中的时间类型...

    考研英语GCC 中文手册.rar J2EE interview book Photo Frame Genius 2.3 破解版 Hiberate Annotation学习笔记 2008年11月份希赛模拟题 multisim 入门帮助文件和元件参数 精通PHP5 光盘源文件 深入理解LINUX 第三版 (英文) 清华大学严蔚敏数据结构(C版)配套光盘 破解万象2008玩免费 jsp学习详细

    考研英语GCC 中文手册.rar J2EE interview book Photo Frame Genius 2.3 破解版 Hiberate Annotation学习笔记 2008年11月份希赛模拟题 multisim 入门帮助文件和元件参数 精通PHP5 光盘源文件 深入理解LINUX 第三版 ...

    Hibernate_annotation_学习笔记

    Hibernate_annotation_学习笔记 第1课 课程内容 6 第2课 Hibernate UML图 6 第3课 风格 7 第4课 资源 7 第5课 环境准备 7 第6课 第一个示例Hibernate HelloWorld 7 第7课 建立Annotation版本的HellWorld 9 第8课 ...

    MLDN学习笔记 —— Annotation

    《MLDN学习笔记——Annotation》这篇博文主要探讨的是在编程领域中,特别是Java语言中,关于Annotation(注解)的深入理解和应用。Annotation是Java语言提供的一种元数据,它为程序提供了额外的信息,这些信息可以被...

    Spring MVC 学习笔记 七 controller中其他可用的annotation

    这篇"Spring MVC 学习笔记 七 controller中其他可用的annotation"可能涵盖了除我们常见的`@RequestMapping`之外的其他注解,这些注解使得控制器功能更加丰富和灵活。下面将详细探讨Spring MVC中Controller相关的注解...

    JAVA Annotation学习

    2. 自定义注解: - 开发者可以根据需要创建自己的注解,通过@interface关键字定义。自定义注解可以没有任何元素,也可以包含成员变量(通常称为元素),并为其提供默认值。 3. 注解的保留策略: - 注解的生命周期...

    Hibernate Annotation 笔记 总结 注解

    【标签】:Hibernate, Annotation, 笔记, 总结, 注解 【正文】: Hibernate Annotation是Hibernate框架的一个重要特性,它允许开发者直接在Java类上使用注解来定义对象的数据库映射,从而避免了传统的XML配置文件...

    张龙 java se课程笔记

    张龙的Java SE课程笔记涵盖了这个领域的许多关键知识点。 1. **Java环境搭建**:首先,学习Java SE需要安装Java Development Kit (JDK),设置好环境变量`JAVA_HOME`、`PATH`和`CLASSPATH`,以便于编译和运行Java...

    Java Annotation学习整理.doc

    Java Annotation学习整理

    JAVA JDK6学习笔记

    Java JDK6学习笔记是针对Java编程语言初学者和进阶者的一份宝贵资源,它涵盖了Java的基础语法,并通过经典且易于理解的实例进行讲解。在本文中,我们将深入探讨Java JDK6中的关键概念和特性,以帮助你更好地理解和...

    struts2 使用Annotation 配置的小例子

    在这个小例子中,我们将深入探讨如何利用Struts2的Annotation配置来构建一个简单的应用。 首先,让我们了解什么是Annotation。在Java中,Annotation是一种元数据,它提供了一种安全的方式向编译器、JVM或者第三方...

    java学习笔记

    Java学习笔记是由知名IT教育专家林信良编著的一本深受好评的编程教材,特别适合初学者入门。这本书深入浅出地介绍了Java编程语言的基础知识和核心概念,旨在帮助读者快速掌握这一强大的开发工具。 首先,书中从Java...

Global site tag (gtag.js) - Google Analytics