码迷,mamicode.com
首页 > 编程语言 > 详细

Java Annotation详解+自定义java注解(一)

时间:2015-08-08 00:06:08      阅读:245      评论:0      收藏:0      [点我收藏+]

标签:annotation   注解   自定义注解   

  • 技术分享
    上述思维导图的下载地址为:http://download.csdn.net/detail/emilyrr/8975487
  • 注解的注解:
    技术分享
  • 经过上面的学习,我们可以通过元注解来实现一个自定义的HelloWorld注解

  • 第一步:定义一个HelloWorld注解

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)//定义了注解的作用位置:在方法上
@Inherited//允许子类继承父类中的注解
public @interface HelloWorld {
    public String name()default "";
}
  • 新建一个注解解析类,底层通过反射机制实现
public class ParseAnnotation {
    public void parseMethod(Class clazz) throws InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchMethodException, SecurityException{
        Object obj = clazz.newInstance();
        Method[] methods=clazz.getDeclaredMethods();

        for(Method m:methods){
            HelloWorld hello=m.getAnnotation(HelloWorld.class);
            String name="";
            if(hello!=null){
                name=hello.name();
                m.invoke(obj, name);
            }
        }

 }
}
  • 新建一个普通类,调用HelloWorld注解
public class SayHello {

    @HelloWorld(name="Yc")
    public void say(String name){
        if(name == null || name.equals("")){  
            System.out.println("hello world");  
        }else{  
            System.out.println( "hello world\t"+name);  
        }  
    }
}
  • 使用Junit测试(新建一个class,在main方法中测试也可以)
 public void testApp() throws InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchMethodException, SecurityException
    {
        ParseAnnotation pa=new ParseAnnotation();
        pa.parseMethod(SayHello.class); 
    }
  • 下面我们来看测试结果:
    技术分享

通过测试类可以看出,我们并没有直接new SayHello对象,也没有调用它的 say( )方法,而是通过注解的解析框架用反射机制激活的say。影哥说,这个编码的变革时代。

版权声明:本文为博主原创文章,谢谢参考!有问题的地方,欢迎纠正,一起进步。

Java Annotation详解+自定义java注解(一)

标签:annotation   注解   自定义注解   

原文地址:http://blog.csdn.net/emilyrr/article/details/47345601

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!