Java 自定义annotation使用示例_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > Java 自定义annotation使用示例

Java 自定义annotation使用示例

 2013/8/13 16:06:52  oham_一1一  程序员俱乐部  我要评论(0)
  • 摘要:Annotation是一种用于描述数据的一种数据,在Java里所描述的数据指的是Java的程序代码,主要目的是为了让第三者能够从这些annotation当中得到一些信息,但也能用于实现某种业务上的操作,比如Spring中使用到的那些annotation,鄙人就是想像Spring那样使用annotation而作这篇笔记。自定义一个annotation,TestMyAnno.java:packagelearnHibernate.annotations;importjava.lang
  • 标签:使用 not Java Annotation 自定义

Annotation 是一种用于描述数据的一种数据,在Java里所描述的数据指的是Java的程序代码,主要目的是为了让第三者能够从这些annotation当中得到一些信息,但也能用于实现某种业务上的操作,比如Spring中使用到的那些annotation,鄙人就是想像Spring那样使用annotation而作这篇笔记。

?

自定义一个annotation,TestMyAnno.java:

?

class="java" name="code">package learnHibernate.annotations;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
public @interface MyAnno {
	public enum Member{OHAM, LULU, CANCAN, MAOMAO};
	
	Member member() default Member.OHAM;
	String birth();
}

?解析

? ? 1.@Target——用于指定该Annotation类型可以用在注释在哪些元素上,形如“@Target(value=METHOD)”表示只能用于注释方法,value可以指定以下:


?若一个自定义的annotation没有表示@Target,则该自定义的annotation可以用于任何的元素上。

?

? ?2.@Retention用于设定该annotation保留到什么时候,通过RetentionPolicy这个enum类型指定,有三个值:CLASS,代表保留到编译好的class文件中,但执行的时候并不会把annotation的数据加载到JVM当中,默认值,用在不想给源码别人,但又想让别人知道一些源码里的信息;SOURCE,代表保留到源码当中,如@Override那样的作用;RUNTIME,代表会保留到class文件当中,并且执行的时候也会加载到JVM当中,即runtime的时候,我们可以取出annotation的信息用于实现业务逻辑,如Spring的annotation那般。

? ?3.@Document,用于生产Doc文档用,想@Deprecated那样。

? ?4.@Inherited,用于类之间的继承,当父类使用了annotation,这些annotation类型以及其所设定的参数值并不会一并继承给父类的子类,若想让annotation的数据可以继承给子类,需要给该annotation标上@Inherited,注意,@Inherited只对类有作用,所以使用了@Inherited的annotation只能使用在类上(接口也不行)。

?

测试代码:TestMyAnno.java,TestMyAnno类被@MyAnno注释,鄙人直接在其main方法里做测试。。。

package learnHibernate.bean;

import learnHibernate.annotations.MyAnno;
import learnHibernate.annotations.MyAnno.Member;

@MyAnno(member=Member.LULU, birth="2000/1/12")
public class TestMyAnno {

	public static void main(String[] args) {
		
		Class cls = TestMyAnno.class;
		
		//判断cls是否有被@MyAnno标注
		boolean hasMyAnno = cls.isAnnotationPresent(MyAnno.class);
		
		if(hasMyAnno) {
			//获取当前被@MyAnno标注的class的MyAnno对象
			MyAnno anno = (MyAnno)cls.getAnnotation(MyAnno.class);
			System.out.println(anno.birth() + "  " + anno.member());
			
			//这里只是玩玩printf怀念下,不必介意
			System.out.printf("%s   %s", anno.member(), anno.birth());
		}
		
	}
	
	
	
}

?

  • 大小: 10.3 KB
  • 查看图片附件
发表评论
用户名: 匿名