java注解编程的小栗子
时间:2015-09-25 16:36:56
收藏:0
阅读:200
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; import java.lang.reflect.Method; public class AnalysisAnnotation { /** * 一个java annotation的例子。总结两点 * 1,annotation是利用反射获得annotation信息,类不需要实例。所以本身与类的实例赋值没有任何关系 * 2,如果想用反射进行映射则需要用到invoke和将类实例后处理,注意invoke方法的参数问题 * @param args */ public static void main(String[] args) throws Exception { try { // 通过运行时反射API获得annotation信息 Class rt_class = Class.forName("Utility"); Object o = rt_class.newInstance(); Method[] methods = rt_class.getMethods(); boolean flag = rt_class.isAnnotationPresent(Description.class); if (flag) { Description description = (Description) rt_class .getAnnotation(Description.class); System.out.println("Utility‘s Description--->" + description.value()); for (Method method : methods) { if (method.isAnnotationPresent(Author.class)) { Author author = (Author) method .getAnnotation(Author.class); System.out.println("Utility‘s Author--->" + author.name() + " from " + author.group() + " is " + method.invoke(o)); } } } } catch (ClassNotFoundException e) { e.printStackTrace(); } } } @Description(value = "这是一个工具类") class Utility { @Author(name="小刘",group="石器时代") public String work(){ return "work!"; } @Author(name="小张",group="石器时代") public String work1(String s){ return "works!"; } } @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) @Documented @interface Author { String name() default "defaultName"; String group() default "defaultGroup"; } @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.TYPE) @Documented @interface Description { String value(); }
原文:http://my.oschina.net/liuyuxiang/blog/511214
评论(0)