本文目的:项目开发过程中遇到自定义注解,想要弄清楚其原理,但是自己的基础知识不足以支撑自己去探索此问题,所以先记录问题,然后补充基础知识,然后解决其问题。记录此学习过程。
项目中遇到的注解: //使用注解的地方 @ServiceScan({"com.sinosoft.lis.pubfun"}) public class CodeQuerySQL {} //注解类 ServiceScan @Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) public @interface ServiceScan { String[] value() default {}; } //这个com.sinosoft.lis.pubfun包下的类 @CodeQuery public interface CodeQuery_Framework {} //注解类CodeQuery @Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) public @interface CodeQuery { }问题描述: 开发中,我们需要自己新建一个codequeryframework_nb类,这个类是这样使用的,放在com.sinosoft.lis.pubfun包下就行,然后自定义方法,就会自动被扫描到,然后会自动加载定义的接口方法类,去实现我们的查询下拉的功能。注解使用正确,包放在正确的位置就可以使用了,但是为什么不会和之前的codequeryframework冲突?具体是怎么实现的,我们组内的成员都没搞明白。我决定把注解这个知识点往深处挖一挖。
我们的问题:
功能这是怎么实现的。
为什么不会和之前创建的类冲突。
其实就是,怎么实现的。
学习目的:
能够解释:为什么这个类是通过注解如何实现的
了解注解是什么,注解怎么用,注解的实现原理
注解基础知识补充:学习过程:
首先,先找一个资料,大概的对注解有一定的认识。 https://www.runoob.com/w3cnote/java-annotation.html
查询一些博主的博文,看看他们都提到哪些大的点,基本上都是一样的,所以就能定位到自己需要首先了解哪些是需要学习和了解的
对于过程中的疑问,进行查漏补缺。为自己解惑
其他人提到的知识点:java5,元注解,自定义注解,注解的实现,注解的属性,注解的作用,在反射中使用注解
注解的本质 //「java.lang.annotation.Annotation」接口中有这么一句话,用来描述『注解』。 The common interface extended by all annotation types 所有的注解类型都继承自这个普通的接口(Annotation)我们先随便点开一个JDK内的注解,查看一下是如何定义的
@Target(ElementType.METHOD) @Retention(RetentionPolicy.SOURCE) public @interface Override { }这是注解 @Override 的定义,其实它本质上就是:
public interface Override extends Annotation{ }没错,注解的本质就是一个继承了 Annotation 接口的接口。有关这一点,你可以去反编译任意一个注解类,你会得到结果的。
为什么要用注解?这里找到了两位博主的解析,感觉简单易懂很到位。先来一个整体上的认识。
在平时不知道我们是否都用过便利贴,在一张纸上写好几句话,贴在我们需要的地方.还有一个情况,大多数人都叫我们程序猿(钱多话少死得快),这也是给我们贴了一个标签。像这两种情况基本上就是注解。你可以把这两种情况联想到代码的注解上。比如我们定义了一个方法,这个方法要实现加法的运算,那么我们就可以定义一个@ADD标签。表示这个方法就是实现加法的。我们程序员一看到这个@ADD,就能很容易理解这个方法是干嘛的。简单而言。注解就是对于代码中某些鲜活个体的贴上去的一张标签。简化来讲,注解如同一张标签。因为,如果你之前还未正式的学习过注解,你就可以把他当成便利贴标签就好了,这能帮你理解注解的大部分内容。
以前,『XML』是各大框架的青睐者,它以松耦合的方式完成了框架中几乎所有的配置,但是随着项目越来越庞大,『XML』的内容也越来越复杂,维护成本变高。于是就有人提出来一种标记式高耦合的配置方式,『注解』。方法上可以进行注解,类上也可以注解,字段属性上也可以注解,反正几乎需要配置的地方都可以进行注解。关于『注解』和『XML』两种不同的配置模式,争论了好多年了,各有各的优劣,注解可以提供更大的便捷性,易于维护修改,但耦合度高,而 XML 相对于注解则是相反的。追求低耦合就要抛弃高效率,追求效率必然会遇到耦合。本文意不再辨析两者谁优谁劣,而在于以最简单的语言介绍注解相关的基本内容。
元注解 元注解的作用:『元注解』是用于修饰注解的注解,通常用在注解的定义上
@Target(ElementType.METHOD) @Retention(RetentionPolicy.SOURCE) public @interface Override { }这是我们 @Override 注解的定义,你可以看到其中的 @Target,@Retention 两个注解就是我们所谓的『元注解』,『元注解』一般用于指定某个注解生命周期以及作用目标等信息。
那么元注解分别有哪些 //目前jdk官方提供的元注解有4个 @Target:定义注解的作用目标 @Retention:定义注解的生命周期 @Documented:定义注解是否应当被包含在 JavaDoc 文档中 @Inherited:定义是否允许子类继承该注解 元注解详解