/**
* 操作模块
* @return
*/
public String module() default “” ;
/**
* 操作内容,如:添加用户
* @return
*/
public String operationDesc() default “” ;
}
大家可能看到头顶上的这些注解可能还是一脸懵逼,不知道各自有什么作用,下面和大家仔细说明一下这些注解的含义。
java.lang.annotation提供了四种元注解,专门注解其他的注解(在自定义注解的时候,需要使用到元注解):
@Documented –注解是否将包含在JavaDoc中
@Retention –什么时候使用该注解
@Target –注解用于什么地方
@Inherited – 是否允许子类继承该注解
1.)@Retention– 定义该注解的生命周期
● RetentionPolicy.SOURCE : 在编译阶段丢弃。这些注解在编译结束之后就不再有任何意义,所以它们不会写入字节码。@Override, @SuppressWarnings都属于这类注解。
● RetentionPolicy.CLASS : 在类加载的时候丢弃。在字节码文件的处理中有用。注解默认使用这种方式
● RetentionPolicy.RUNTIME : 始终不会丢弃,运行期也保留该注解,因此可以使用反射机制读取该注解的信息。我们自定义的注解通常使用这种方式。
2.)Target – 表示该注解用于什么地方。默认值为任何元素,表示该注解用于什么地方。可用的ElementType参数包括
● ElementType.CONSTRUCTOR:用于描述构造器
● ElementType.FIELD:成员变量、对象、属性(包括enum实例)
● ElementType.LOCAL_VARIABLE:用于描述局部变量
● ElementType.METHOD:用于描述方法
● ElementType.PACKAGE:用于描述包
● ElementType.PARAMETER:用于描述参数
● ElementType.TYPE:用于描述类、接口(包括注解类型) 或enum声明
3.)@Documented–一个简单的Annotations标记注解,表示是否将注解信息添加在java文档中。
4.)@Inherited – 定义该注释和子类的关系
@Inherited 元注解是一个标记注解,@Inherited阐述了某个被标注的类型是被继承的。如果一个使用了@Inherited修饰的annotation类型被用于一个class,则这个annotation将被用于该class的子类。
含义说明完了,接在来的问题就是我们要怎么把他用在项目中呢,具体的实现要怎么写。大家不用着急,容我徐徐道来。
在我们项目中这个自定义注解只用来做一件事情,就是做接口日志收集,将收集到的日志打印到ELK(日志系统)中去。所以我们需要在每一个接口上面都填加这个注解,然后在利用切面类来收集这些接口的日志,将日志信息全部打印到ELK(日志系统)中去。下面我们来看具体的实现:
![](https://note.youdao.com/yws/api/group/76450073/noteresource/74A50ED050C24D7D93326155A96DD1BC/vers
必看视频!获取2024年最新Java开发全套学习资料 备注Java
ion/278?method=get-resource&shareToken=20E71B2BA5524126A0297A8B086DDF9C&entryId=202417575)
最后
光给面试题不给答案不是我的风格。这里面的面试题也只是凤毛麟角,还有答案的话会极大的增加文章的篇幅,减少文章的可读性
Java面试宝典2021版
最常见Java面试题解析(2021最新版)
2021企业Java面试题精选
外链图片转存中…(img-I0dgIera-1716465856952)]
[外链图片转存中…(img-4G5meDn0-1716465856953)]
2021企业Java面试题精选
[外链图片转存中…(img-yaNHH05R-1716465856953)]
[外链图片转存中…(img-XjCflJUp-1716465856953)]