江湖开发者 | Java粉
网站地图
首页> Java> java Annotation 自定义注解
2016
03-01

java Annotation 自定义注解

java Annotation 自定义注解


注解常与反射结合使用

自定义注解类:

@Retention(RetentionPolicy.RUNTIME)
@Target(value=ElementType.METHOD)
public @interface MyAnnotation {
	String methodName();
}

应用注解类:

public class Test {
	
	@MyAnnotation(methodName="test1-annotation")
	public void test1(){
		System.out.println("this is test1");
	}
	
	public static void main(String[] args) {
		Class clazz = Test.class;
		Method[] methods = clazz.getMethods();
		for(Method m :methods){
			String name = m.getName();
			 MyAnnotation annotation = m.getAnnotation(MyAnnotation.class);
			if( annotation!=null){
				System.out.println("被MyAnnoation修饰的方法 :"+name);
				String methodName = annotation.methodName();
				System.out.println("注解内容为:"+methodName);
			};
		}
	}

}

输出:

/**
被MyAnnoation修饰的方法 :test1
注解内容为:test1-annotation
*/


JDK5.0提供了专门在注解上的注解类型:元注解


@Documented –注解是否将包含在JavaDoc中

@Retention –什么时候使用该注解

@Target –注解用于什么地方

@Inherited – 是否允许子类继承该注解


常用的@Rectention 和 @Target:


>.@Retention


只能用于修饰自定义Annotation,用于指定该Annotation可以保留多长时间,@Rentention包含一个RetentionPolicy类型的成员变量,使用@Rentention必须为该value成员变量指定值:

>.RetentionPolicy.SOURCE – 在编译阶段丢弃。这些注解在编译结束之后就不再有任何意义,所以它们不会写入字节码。@Override, @SuppressWarnings都属于这类注解。

>.RetentionPolicy.CLASS – 在类加载的时候丢弃。在字节码文件的处理中有用。注解默认使用这种方式。

>.RetentionPolicy.RUNTIME– 始终不会丢弃,运行期也保留该注解,因此可以使用反射机制读取该注解的信息。我们自定义的注解通常使用这种方式。

>.@Target – 表示该注解用于什么地方。如果不明确指出,该注解可以放在任何地方。以下是一些可用的参数。需要说明的是:属性的注解是兼容的,如果你想给7个属性都添加注解,仅仅排除一个属性,那么你需要在定义target包含所有的属性。


ElementType.TYPE:用于描述类、接口或enum声明

ElementType.FIELD:用于描述实例变量

ElementType.METHOD

ElementType.PARAMETER

ElementType.CONSTRUCTOR

ElementType.LOCAL_VARIABLE

ElementType.ANNOTATION_TYPE 另一个注释

ElementType.PACKAGE 用于记录java文件的package信息




Java江湖     
全部评论:

表情验证码,看不清楚,换一张

随机文章

云标签

公众号

微信

分享:分享我们的知识;专注:专注个人技术的提升;