`
wjjbfq
  • 浏览: 82156 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Annotation注解 总结

阅读更多

       annotation(注解)并不直接影响代码语义,但是它能够工作的方式被看作类似程序的工具或者类库,它会反过来对正在运行的程序语义有所影响。annotation可以从源文件、class文件或者以在运行时反射的多种方式被读取。
      JDK5内建的annotation 有@Override @Deprecated @SuppressWarnings

       @Override 当子类重写父类的方法时,在子类的方法上面加上此注释,可以检查重写的方法是否正确。

       @Deprecated 标示此方法已经过时。

       @SuppressWarnings 将警告忽略。@SuppressWarnings({"unchecked","deprecation"})

       

例如:Map map = new Map();会出现警告,应为没有应用泛型,
正确的为Map<?,?> map = new Map<?,?>();此方法前加上@SuppressWarnings("unchecked")警告会消失。

  

自定义annotation

使用@interface自行定义Annotation型态时,实际上是自动继承了java.lang.annotation.Annotation接口
由编译程序自动为您完成其它产生的细节

 

1、创建一个自定义的annotation名为MyAnnotation

public @interface MyAnnotation
{
	String hello() default "wangjie";
	String world();
}

    annotation 方法中默认为 String value(); 如果为默认属性时,可以使用@MyAnnotation("XXX") 否则得使用@MyAnnotation(hello="XXX",world="XXX") .hello的值将覆盖default中的值"wangjie".另外hello()有默认值所以@MyAnnotation(world="XXX")也是正确的。

2、创建一个测试类

//annotation 可以放在类、方法、属性前面。
@MyAnnotation(hello = "beijing", world = "shanghai")
public class MyTest
{
	@MyAnnotation(hello = "beijing", world = "shanghai")
	public void output()
	{
		System.out.println("output something");
	}
}

 2.1 这样就完成了注释的编写。注释会在程序代码、编译、运行时都会保留吗?这还需要自己来设定。

        java.lang.annotation.Retention型态可以在您定义Annotation型态时,指示编译程序该如何对待您的自定义的    Annotation型态
         预设上编译程序会将Annotation信息留在.class档案中,但不被虚拟机读取,而仅用于编译程序或工具程序运行时提供信息
         在使用Retention型态时,需要提供java.lang.annotation.RetentionPolicy的枚举型态
package java.lang.annotation;
public enum RetentionPolicy
 {
     SOURCE, //编译程序处理完Annotation信息后就完成任务
     CLASS,  //编译程序将Annotation储存于class档中,缺省
     RUNTIME //编译程序将Annotation储存于class檔中,可由VM读入
}

所以要指示annotation可以保留在何种方式中,需要用到:@Retention(XXX) xxx为RetentionPolicy.RUNTIME 或

RetentionPolicy.SOURCE 默认为RetentionPolicy.CLASS

 

例如将上面可以MyAnnotation修改为

@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation
{
	String hello() default "wangjie";
	String world();
}

 这样在程序运行时就可以调用MyAnnotation 中的值了。调用采用反射。

例如:

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

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(method.isAnnotationPresent(MyAnnotation.class))
		{
			MyAnnotation myAnnotation = method.getAnnotation(MyAnnotation.class);
			
			String hello = myAnnotation.hello();
			String world = myAnnotation.world();
			
			System.out.println(hello);
			System.out.println(world);
			
		}
		//打印出方法上面所使用的所以annotation的类型名称。 
		Annotation[] annotations = method.getAnnotations();
		
		for(Annotation annotation : annotations)
		{
			System.out.println(annotation.annotationType().getName());
		}
		
	}
}	

 结果为:

beijing
shanghai
com.langsin.annotation.MyAnnotation

 2.2 如果要限定annotation放置的位置 可以使用@Target()

例如

@Target(ElementType.METHOD)  //这里加入了,则表示MyAnnotation只能放在方法的前面。
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation
{
	String hello() default "langsin";
	String world();
}

 Target的参数有:

package java.lang.annotation;
public enum ElementType 
{
     TYPE, //适用class, interface, enum
     FIELD, //适用field
     METHOD, //适用method
     PARAMETER, //适用method上之parameter
     CONSTRUCTOR, //适用constructor
     LOCAL_VARIABLE, //适用局部变量
     ANNOTATION_TYPE, //适用annotation型态
     PACKAGE //适用package
}

 2.3 如果一个父类加入了@MyAnnotation() 他的子类也想继承父类的这个注释。则在MyAnnotation中需要加入@Inherited()  这样在子类中才能得到这个注释的内容。(运用反射)。

 

@Retention(RetentionPolicy.RUNTIME)
@Inherited
public @interface MyAnnotation
{
	String hello() default "wangjie";
	String world();
}

 

 2.4 想要在使用者制作JavaDoc文件的同时,也一并将Annotation的讯息加入至API文件中
使用java.lang.annotation.Documented

即在annotation  前加入@Documented

例如:

@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface MyAnnotation
{
	String hello() default "wangjie";
	String world();
}

 

分享到:
评论

相关推荐

    spring的Annotation注解.

    ### Spring框架中的Annotation注解详解 #### 一、Spring与Annotation的基本概念 Spring框架通过引入Annotation,极大地简化了Java开发中的依赖注入(Dependency Injection, DI)和面向切面编程(AOP)的过程。...

    Hibernate Annotation 笔记 总结 注解

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

    Annotation注解的介绍和使用

    ### Annotation注解的深入解析与应用 #### 一、Annotation概览 ##### 1.1 何为元数据 元数据,在计算机科学中,是指用于描述数据的数据,它提供了关于数据本身的附加信息,有助于理解、解释和管理数据。在编程...

    Java Annotation注解技术

    Java Annotation注解技术是自Java SE 5.0版本引入的一种元编程机制,它允许程序员在源代码的各个层面(如类、方法、变量等)添加元数据,以供编译器、JVM或第三方工具在编译时或运行时进行处理。Annotation简化了...

    java1.5 annotation注释源代码

    总结,Java 1.5引入的注解机制为编程带来了很多便利,使得代码更加清晰,同时也降低了维护成本。通过深入理解注解的工作原理和使用方式,开发者可以更好地利用这一特性,提高代码质量和效率。而源代码分析则有助于...

    自定义Annotation注解

    总结起来,自定义Annotation注解是Java中强大的工具,它允许程序员以声明式方式添加元数据,从而简化代码和提高可维护性。`CustomAnnotationDemo`是一个基础示例,展示了如何定义、使用和处理自定义注解,对于理解这...

    mybatis学习总结:annotation与xml结合示例

    本篇文章将聚焦于MyBatis中的注解(Annotation)与XML配置的结合使用,旨在帮助开发者更深入地理解这一关键特性。 首先,MyBatis允许我们使用注解来简化Mapper接口的定义,无需编写XML映射文件。例如,我们可以在...

    自定义注解annotation及用法

    在Java编程语言中,注解(Annotation)是一种元数据,它提供了向编译器、工具或运行时系统提供额外信息的方式。自定义注解允许开发者创建自己的标记来满足特定需求,比如代码生成、验证、持久化等。本文将深入探讨...

    Annotation(注解)详细教程,jdk新特性

    总结起来,Annotation是Java语言的一个强大特性,它提供了一种安全、灵活的方式来添加和利用元数据。通过结合编译器、IDE和其他工具,Annotation可以显著提高开发效率,增强代码质量,简化维护,并推动代码的自动化...

    annotation

    总结起来,`annotation`是Java中一种强大的工具,它可以用于代码的元数据声明,为编译器和运行时环境提供了丰富的信息。通过自定义注解和对应的处理机制,我们可以实现代码的自动化处理、验证、配置等高级功能。在...

    Annotation手册

    在Java中,Annotation表现为一种“name=value”结构的声明,它们通常用于提供额外的元信息,比如代码的注解、编译时检查或运行时的处理。 Annotation的定义分为以下几个关键点: 1. **Annotation的概念**:...

    ssh全注解-annotation

    ### 总结 全注解配置方式大大简化了SSH项目的配置过程,使代码更加简洁明了,易于理解和维护。通过上述介绍,我们了解了如何在Struts2、Spring和Hibernate中利用注解来替代传统的XML配置文件,从而实现无配置架构。...

    sping hibernate Annotation(注释配置) demo(例子)

    总结来说,这个 "Spring Hibernate Annotation demo" 展示了如何在 Spring 框架中使用注解配置来管理依赖,以及如何利用 Hibernate 的注解进行数据持久化。同时,它还涉及到了 Flex 前端与后端的交互。通过学习这个 ...

    详解Android注解 Annotation

    在Android开发中,注解(Annotation)是一种元数据,它提供了在代码中附加信息的方式,这些信息可以被编译器或者运行时环境用来执行特定的操作。注解在Java语言中引入,随后被广泛应用于Android系统,帮助开发者实现...

    jar包_javax.annotation.zip

    总结起来,`javax.annotation.zip`这个压缩包中的`javax.annotation-api-1.3.2.jar`是Java开发中处理注解的关键库,特别是对于依赖注入和IoC场景,如使用`@Resource`注解进行Bean装配。如果在项目中遇到`@Resource`...

    annotation详解

    总结,注解在Java开发中扮演了不可或缺的角色,它们简化了代码维护,提供了元数据的声明,并允许自定义编译时和运行时的行为。通过深入理解并熟练运用注解,可以提高代码的可读性、可维护性和可扩展性。

    java 注解annotation的使用以及反射如何获取注解

    总结,Java注解是一种强大的工具,能够简化代码,提供元数据,增强代码的可读性和可维护性。结合反射机制,我们可以利用注解实现许多灵活的编程模式,如自动化配置、动态代理等。了解并熟练运用注解,是提升Java开发...

    Hibernate Annotation 中文文档

    Hibernate Annotation是Hibernate框架的一个扩展,它允许开发者直接在Java类和属性上使用注解(Annotations),来定义实体类与数据库表之间的映射关系。相比于XML配置,注解提供了一种更加内聚和直接的方式,使得...

Global site tag (gtag.js) - Google Analytics