您的位置:首页 > 编程语言 > Java开发

如何使用java自定义注解?demo

2016-02-25 10:59 204 查看
1、Description.java

package kzfy.bk.com;

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

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Description {
String value();
}


2、Name.java

package kzfy.bk.com;

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

//注意这里的@Target与@Description里的不同,参数成员也不同
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Name {
String originate();
String community();
}


3、MyTest.java

package kzfy.bk.com;

@Description("我的第一个使用自定义注解的类!")
public class MyTest{
@Name(originate="空中飞鱼",community="java")
public String getName(){
return "java,我的人生路!";
}

@Name(originate="博客园",community="写博客")
public String getName2() {
return "博客,新的征程!";
}
}


4、运行提取MyTest的类TestAnnotation.java

package kzfy.bk.com;

import java.lang.reflect.Method;
import java.util.HashSet;
import java.util.Set;

public class TestAnnotation {
/**
* Annotation的API的用法请参见javaDoc文档
*/
public static void main(String[] args) throws Exception {
String  CLASS_NAME ="kzfy.bk.com.MyTest";
Class  test = Class.forName(CLASS_NAME);
boolean flag = test.isAnnotationPresent(Description.class);
if(flag){
Description des = (Description)test.getAnnotation(Description.class);
System.out.println("描述:"+des.value());
System.out.println("-----------------");
}

//把JavaEyer这一类有利用到@Name的全部方法保存到Set中去
Method[] method = test.getMethods();
Set<Method> set = new HashSet<Method>();
for(int i=0;i<method.length;i++) {
boolean otherFlag = method[i].isAnnotationPresent(Name.class);
if(otherFlag) set.add(method[i]);
}
for(Method m: set) {
Name name = m.getAnnotation(Name.class);
System.out.println("orginate:"+name.originate());
System.out.println("community:"+name.community());
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: