注解的用途
在实际的java开发中我们会使用各种各样的注解,每个注解都有不用的作用,也有不同的作用范围,比如长见的@Override注解,在重写父类方法的时候会出现,最常见的地方就是接口的实现类中,再有就是在方法入参的时候经常需要用到的lombok的@NonNull注解,有了这个注解就可以控制入参参数不为null,不需要自己手动实现校验逻辑。大多数的注解并没有实现注解名称对应的功能,仅仅是起到标记的作用,真正起作用的或者实现这些功能的代码逻辑在其他的class文件中,关于如何通过注解实现某些功能下个章节在将,这个章节只讲如何创建自定义注解
先来看下lombok中@NonNull注解

这是一个标记注解,结构非常的简单,只是在interface前面加上了@符号,上面多了几个其他的注解而已
@Target注解以及其中参数作用:表明这个注解能用在哪些地方,target里面可以放多个值每个值对应如下
1.ElementType.CONSTRUCTOR:用于构造器
2.ElementType.FIELD:用于属性
3.ElementType.LOCAL_VARIABLE:用于局部变量
4.ElementType.METHOD:用于方法
5.ElementType.PACKAGE:用于包
6.ElementType.PARAMETER:用于参数
7.ElementType.TYPE:用于类、接口(包括注解类型) 或enum声明
注解类上的其余注解的作用
@Documented – 注解是否将包含在JavaDoc中
@Retention – 什么时候使用该注解
@Inherited – 是否允许子类继承该注解
一般来说,自定义注解的使用范围不要写的太宽,按照自己的使用场景在target中的选择合适的范围就行
以下是我在项目中使用的两个标记注解


网友评论