回顾java Annotation(注解)

最近在学习中发现相当多的框架是通过注解来实现的。为了加深记忆,把注解重新做一下回顾。

首先注解不是注释。——但因为java语言内置了三个注解:@Override、@Deprecated、@SuppressWarnnings。第一个是通知编译器做方法覆盖检查;第二个是提醒程序员使用了过时的方法;第三个是通知编译器忽略警告。这三个内置注解用起来给人的感觉就象注释一样。而实际上注解的用法远不止这么简单,通过使用自定义注解有助于加深我们的理解。

使用自定义注解目的是为了给程序加上某些标记(这种标记也可称之为元数据),这些标记是给有关注需要的其他程序使用的。不关注的就直接忽略过去了。所以使用注解的完整过程包括三步:定义注解、使用注解、解析注解。和我们定义类、创建对象、使用对象是一样的。下面结合一个小例子分别说明:

第一步,定义注解

Annotation(注解)其实是一个接口,但不是用interface关键字而是用@interface,以示区别。因为的确和普通接口有区别——Annotation类型的方法必须是无参数、无异常抛出的;默认继承自java.lang.annotation.Annotation

先定义一个用于类的注解

package com.annotation.zjc;
import java.lang.annotation.*;

//以下三行是“元注解”,用于指明此注解的生命周期、使用范围和可被文档化
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Documented
public @interface Description {
	String value();
}

再定义一个用于构造函数和方法的注解

package com.annotation.zjc;
import java.lang.annotation.*;

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.CONSTRUCTOR,ElementType.METHOD})
@Documented
public @interface Resource {
	int id();
	String name();
	String type() default "Object";  //可以给出默认值
}

第二步,使用注解

注解可以使用在包,类,字段,方法,方法的参数以及局部变量上(最多见就是用在类和方法上,其他位置比较罕见)。使用了注解也就相当于创建了一个注解类的实例。

package com.annotation.zjc;

@Description("Inject use annotation")
//等同于@Description(value="Inject use annotation"),字段名称为value,可以用以上简写模式
public class ApplyAnnotation {

	@Resource(id=1,name="zhang",type="person")
	public ApplyAnnotation(){
		//init...
	}
	public void execute(Resource r){
		System.out.println(r.id()+"  "+r.name()+"  "+r.type());
	}
}

第三步,解析注解

package com.annotation.zjc;

import java.lang.reflect.Constructor;
public class testMain {
	public static void main(String[] args){
		ApplyAnnotation aa=new ApplyAnnotation();
		Class<?> objclass=null;
		try{
			objclass = Class.forName("com.annotation.zjc.ApplyAnnotation");
		}catch(Exception e){}

		if(objclass!=null&&objclass.isAnnotationPresent(Description.class)){
			Description des=objclass.getAnnotation(Description.class);//获取“注解对象”
			System.out.println(des.value());
		}

		Resource r=null;
		if(objclass!=null){
			Constructor<?> cons[]=objclass.getConstructors();//反射取得类的构造函数
			for(Constructor<?> con:cons){
				if(con.isAnnotationPresent(Resource.class)){
					r=(Resource)con.getAnnotation(Resource.class);//获取“注解对象”
				}
			}
		}

		if(r!=null)
			aa.execute(r);
	}
}

在实际情况中,往往是第一步、第三步都由框架或工具程序做了,我们只需要在自己的程序中使用注解即可。当然使用前要import相应的包文件。

回顾java Annotation(注解)

时间: 2024-08-10 01:52:05

回顾java Annotation(注解)的相关文章

自己写的基于java Annotation(注解)的数据校验框架

JavaEE6中提供了基于java Annotation(注解)的Bean校验框架,Hibernate也有类似的基于Annotation的数据校验功能,我在工作中,产品也经常需要使 用数据校验,为了方便和重用,自己写了一个简单的基于Annotation的校验框架.有兴趣的可以扩展. 框架说明: AnnotationValidable接口:所有需要使用该校验框架的类都要实现它,该类中没有任何方法需要实现,仅仅是一个表明那些类需要使用该校验框架的标识. GetFiledValue类:是一个工具类,对

第17篇-JAVA Annotation 注解

第17篇-JAVA Annotation 注解 每篇一句 :真的努力后你会发现自己要比想象的优秀很多 初学心得: 怀着一颗奋斗不息的心,一切困苦艰辛自当迎刃而解 (笔者:JEEP/711)[JAVA笔记 | 时间:2017-05-17| JAVA Annotation注解 ] 1.什么是注解(Annotation) Annotation 其实就是代码里的特殊标记, 它用于替代配置文件,也就是说,传统方式通过配置文件告诉类如何运行,有了注解技术后,开发人员可以通过注解告诉类如何运行.在Java技术

Java Annotation 注解

java_notation.html div.oembedall-githubrepos { border: 1px solid #DDD; list-style-type: none; margin: 0 0 10px; padding: 8px 10px 0; font: 13.34px/1.4 helvetica, arial, freesans, clean, sans-serif; width: 452px; background-color: #fff } div.oembedall

java Annotation 注解的使用

源码地址:https://github.com/yylxy/JavaAnnotationTest.git java Annotation 注解的使用 ,代码中有详细的注释.是用AndroidStudio写的 /** * 说明:注解创建类 * 作者: 杨阳; 创建于: 2017-06-02 16:10 */@Retention(RetentionPolicy.RUNTIME)//定义注释的生命周期@Target({ElementType.METHOD, ElementType.TYPE})//注释

Java Annotation注解

参考:Java官方文档http://docs.oracle.com/javase/specs/jls/se7/html/jls-9.html#jls-9.6 注解类型: 是一种特殊类型的interface,区别在于注解声明是 @interface 特点: 1.java的注解不可显式声明父类(实际上他们都继承了Annotation类,但是你在声明时无法使用extends 关键字),也无法被泛化. 2.方法: a) 每个方法都定义了该注解中的一个元素(Each method declaration

JAVA - Annotation 注解 入门

Java注解提供了关于代码的一些信息,但并不直接作用于它所注解的代码内容.在这个教程当中,我们将学习Java的注解,如何定制注解,注解的使用以及如何通过反射解析注解. Java1.5引入了注解,当前许多java框架中大量使用注解,如Hibernate.Jersey.Spring.注解作为程序的元数据嵌入到程序当中.注解可以被一些解析工具或者是编译工具进行解析.我们也可以声明注解在编译过程或执行时产生作用. 在使用注解之前,程序源数据只是通过java注释和javadoc,但是注解提供的功能要远远超

Java Annotation注解语法

JAVA从J2SE5开始提供名为annotation(注释,标注)的功能.Java的annotation,可以附加在package, class, method, field等上面,相当于给它们添加了额外的辅助信息.附加在package, class, method, field等上的Annotation,如果没有外部解析工具等对其加以解析和处理的情况,本身不会对Java的源代码或class等产生任何影响,也不会对它们的执行产生任何影响. 但借助外部工具,比如javac,EJB容器等,可以对附加

深入理解Java:注解(Annotation)--注解处理器

深入理解Java:注解(Annotation)--注解处理器 如果没有用来读取注解的方法和工作,那么注解也就不会比注释更有用处了.使用注解的过程中,很重要的一部分就是创建于使用注解处理器.Java SE5扩展了反射机制的API,以帮助程序员快速的构造自定义注解处理器. 注解处理器类库(java.lang.reflect.AnnotatedElement): Java使用Annotation接口来代表程序元素前面的注解,该接口是所有Annotation类型的父接口.除此之外,Java在java.l

深入理解Java:注解(Annotation)自己定义注解入门

深入理解Java:注解(Annotation)自己定义注解入门 要深入学习注解.我们就必须能定义自己的注解,并使用注解,在定义自己的注解之前.我们就必须要了解Java为我们提供的元注解和相关定义注解的语法. 元注解: 元注解的作用就是负责注解其它注解. Java5.0定义了4个标准的meta-annotation类型.它们被用来提供对其它 annotation类型作说明.Java5.0定义的元注解: [email protected], [email protected], [email pro