Java自定义注解

最近在项目中用到了java的自定义注解,在解决问题之后,详细学习了java的自定注解的用法。

1、注解的作用

“注解”有注释、解释的含义。注解也是一种元数据,即是数据的数据,注解是描述java源代码信息的数据,是java源代码的元数据。

注解(Annotation)在代码中添加标记信息,之后我们可以通过解析注解来获取标记信息,完成某些动作。

SDK自带注解有以下几种:

1.生成文档,是java 最早提供的注解,常用的有@see @param @return 等;
2.发出提示或者警告信息,@Deprecated和@SuppressWarnings等;
3.利用编译器进行格式检查,在继承函数类,需要覆盖某些函数(函数签名必须完全相同),利用@Override放在方法前可以让编译器帮我们检查函数签名是否和父类某个函数一致。

2、自定义注解

不仅可以使用SDK自带注解,强大之处还在于我们可以自定义注解,实现定制功能。

注解的定义使用关键字“@interface ”。

public @interface MyAnnotation
{
    public enum Enum{A, B, C}
    public Enum value1() default Enum.A;
    public Enum value2();
    public String value3();
}
自定义注解的使用方式并无特殊之处。

@MyAnnotation(value2=MyAnnotation.MyEnum.B, value3 = “abc”)
public void myMethod()
{
//...
}

3、元注解

为了方便自定义注解,SDK为我们提供了几种元注解,就是“自定义注解”的注解。使用普通注解也可对注解进行注解,不过使用元注解提供了一些更好的特性。

3.1 Target

指明自定义注解的使用目标,例如类、方法、字段等,就是说这个注解可以使用在java的那些语言元素上。

如只允许对方法和构造函数进行注解可以写成:

@Target({ElementType.METHOD,  ElementType.CONSTRUCTOR})
public @interface MyAnnotation {}
3.2 Retention

给代码加上注解的目的就是为了读取注解,完成某些动作。但是注解只有被保存在class文件中才可以被读出来,Retention就是为设置注解是否保存在class文件中。

@Retention(RetentionPolicy.SOURCE)
@interface MyAnnotation1 { }

不将注解保存在class文件中,也就是说象“//”一样在编译时被过滤掉了。

@Retention(RetentionPolicy.CLASS)
@interface MyAnnotation2 {}

只将注解保存在class文件中,而使用反射读取注解时忽略这些注解。

@Retention(RetentionPolicy.RUNTIME)
@interface MyAnnotation3 {}
将注解保存在class文件中,也可以通过反射读取注解。
3.3 Documented 

与文档相关,若某个方法使用了“被Documented注解的注解”,那么生成文档时会记录下这个注解。

@Inherited
@interface MyAnnotation { }
@MyAnnotation
public class ParentClass {}
public class ChildClass extends ParentClass { }

4、读取注解

系统的注解都关联到一组动作中了,那么我们注解是不是也要关联到一组动作中才有意义,利用java的反射机制可以解析注解,为注解提供实际意义。

在此暂不做反射的研究,在项目中我们使用AOP的方式使自定义注解有了实际意义。












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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值