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

  • 列表内容
    上述思维导图的下载地址为: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。影哥说,这个编码的变革时代。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值