Java自定义注解

在开发中一些第三方框架经常会使用一些注解来实现功能,项目中也经常会使用到一些注解需要自己去自定义。
一般情况下自定义注解会与反射或者动态代理结合使用,这里先整理一下注解相关的东西。

自定义注解

首先先看下一个常规的自定义注解长什么样子:

@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface Inject {
    /**
     * =没有default  就必须传参
     * value 是默认的
     * @return
     */
//    String value() default "";
    String value();
    int id();
}

从上面的代码可以看出自定义注解非常的简单,只要创建一个@interface 的类加上一些注解就是自定义注解了。

而类的上面还有一些诸如@Target@Retention 的标签,是来指定这个注解的一些信息的,叫元注解。是注解的注解

下面的整理一下元注解。

元注解
  • @Target
  • @Retention
  • @Documented
  • @Inherited
@Target

这个元注解的的作用是描述注解的使用范围,常用的有

public enum ElementType {
    TYPE, // 类、接口、枚举类
    FIELD, // 成员变量(包括:枚举常量)
    METHOD, // 成员方法
    PARAMETER, // 方法参数
    CONSTRUCTOR, // 构造方法
    LOCAL_VARIABLE, // 局部变量
    ANNOTATION_TYPE, // 注解类
    PACKAGE, // 可用于修饰:包
    TYPE_PARAMETER, // 类型参数,JDK 1.8 新增
    TYPE_USE // 使用类型的任何地方,JDK 1.8 新增
}
@Retention

这个元注解的作用是描述注解的保留级别,即注解可以被保留到何时。

public enum RetentionPolicy {
    SOURCE, // 源码阶段  应用场景:APT(注解处理器),帮助生成额外的辅助类 
    CLASS, // 字节码阶段  应用场景:字节码增强
    RUNTIME; // 运行阶段(包含SOURCE和CLASS)  应用场景:反射
}
@Documented

它的作用是在使用 javadoc 工具为类生成帮助文档时是否要保留其注解信息。

@Inherited

它的作用是被它修饰的注解具有继承性,当有父类有这个注解时,子类默认实现这个注解。

自定义注解使用

自定义注解结合上面的元注解就可以简单的使用了,例如:

@Inject(value = "name", id = 2)
public class MainActivity extends AppCompatActivity {}

当然怎样拿到注解里面的参数信息,以及怎样给参数赋值等,需要结合反射来进行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值