java 自定义注解_java自定义注解

在我们编程过程中,会经常需要使用到注解,在使用spring进行应用构建的过程中会使用到非常多的spring注解。这篇就来谈一谈我们是如何去定义自己的注解在程序中进行使用的。

0x01 元注解

jdk1.8给我们提供了如下注解:

1.@Target

2.@Retention

3.@Documented

4.@Inherited

5.@Native

6.@Repeatable

上面这些类型都在jdk提供的java.lang.annotation包下,下面介绍两个常用的注解类:

一、Target:描述注解的作用范围,表示这个注解能用在什么什么地方。取值(ElementType)有:

1.CONSTRUCTOR:用于描述构造器

2.FIELD:用于描述域

3.LOCAL_VARIABLE:用于描述局部变量

4.METHOD:用于描述方法

5.PACKAGE:用于描述包

6.PARAMETER:用于描述参数

7.TYPE:用于描述类、接口(包括注解类型) 或enum声明

上面的定义都在java.lang.annotation.ElementType类中。

二、Retention:描述注解的生命周期。取值有如下几个(定义在java.lang.annotation.RetentionPolicy中):

1.SOURCE:源文件

2.CLASS:class文件

3.RUNTIME:运行时

平时我们用的比较多的值是RUNTIME,注解在运行时生效。

0x02 自定义注解

@Documented

@Retention(RetentionPolicy.RUNTIME)

@Target({ ElementType.FIELD})

public @interface NotNull {

public String value() default "1234";

}

上面是一个自定义的注解类,使用元注解来定义自定义注解,自定义注解的函数名就是参数名,函数返回类型是变量的类型。返回类型只能是基本类型、Class、Enum、String,可以通过default来声明参数的默认值。

下面来看下如何使用这个注解:

在类的定义中使用上面自定义的注解类:

public class TypeClass {

@NotNull

public int intType;

public String s;

@Override

public String toString() {

return "TypeClass{" +

"intType=" + intType +

", s='" + s + '\'' +

'}';

}

}

使用上面定义的类:

TypeClass typeClass = new TypeClass();

Field[] fields = TypeClass.class.getDeclaredFields();

for (Field field : fields) {

NotNull annotation = field.getAnnotation(NotNull.class);

if(annotation != null) {

System.out.println(field.getName() + " " +annotation);

System.out.println("CFNotNull value: " + annotation.value());

}

}

上面的示例中可以拿到TypeClass的所有字段,然后逐个去判断字段的注解,根据自己定义的注解去做不同的逻辑操作。

0x03 使用场景

1.开篇就提到了spring中我们会用到很多注解。

2.自定义注解来对字段进行一定的约束(如在通信的双方)。

3.对注解修饰的对象进行说明限制(比如mvc应用对权限进行集中控制)。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值