IT修真院·小课堂丨互联网职业小课堂在线学习平台

课堂课题:

什么是Annotation,怎么自定义Annotation,Annotation和XML的优缺点各是什么?

关联任务:

任务五

直播时间:

2019-03-02 16:30:00


课堂内容:

视频链接:

PPT链接:

提交按钮:

小课堂内容格式


标题:

【修真院xx(职业)小课堂】课题名称

开场语:

大家好,我是IT修真院XX分院第X期的学员XX,一枚正直纯洁善良的XX程序员,今天给大家分享一下,修真院官网XX(职业)任务X,深度思考中的知识点——XXX

(1)背景介绍:

背景介绍的时候,尽可能的要宽广,讲清楚来龙去脉,讲清楚为什么会需要这个技术。

(2)知识剖析:

讲知识点的时候,尽可能的成体系,学会成体系的去给别人介绍知识。现在很多做的都是零散的,没有分类。

(3)常见问题:

最少列出1个常见问题。

(4)解决方案:

写清楚常见问题的解决方案。

(5)编码实战:

尽可能的去寻找在真实项目中在用的。如果你能找到某个网站在用你说的知识点,这是最好的。学以致用,否则当成练习题就没有意义了。多准备一些demo,讲解过程中将知识点和demo结合,便于大家理解所讲解的知识点。

(6)拓展思考:

知识点之外的拓展思考,由分享人进行讲解,这些东西就是所谓的深度,也是一个人技术水准高低比较的表现。

(7)参考文献:

引入参加文献的时候,在引用的句子后面加上序号【1】。参考文献中列出详细来源。不要去抄别人的东西,这是一个基本的态度。

(8)更多讨论:

Q1:提问人:问题?
A1:回答人(可以是分享人,也可以是其他学员):回答
Q2:提问人:问题?
A2:回答人(可以是分享人,也可以是其他学员):回答
Q3:提问人:问题?
A3:回答人(可以是分享人,也可以是其他学员):回答

(9)鸣谢:

感谢XX、XX师兄,此教程是在他们之前技术分享的基础上完善而成。

(10)结束语:

今天的分享就到这里啦,欢迎大家点赞、转发、留言、拍砖~

什么是Annotation,怎么自定义Annotation,Annotation和XML的优缺点各是什么?     中品

辅导师兄 [郑州|结业弟子]JAVA-张泉良


大家好,我是IT修真院郑州分院第12期的学员李雨航,一枚正直纯洁善良的后端程序员,今天给大家分享一下,修真院官网java(职业)任务5,


深度思考中的知识点——什么是Annotation,怎么自定义Annotation,Annotation和XML的优缺点各是什么?

1.背景介绍

什么是Annontation?

Annontation是Java5开始引入的新特征,中文名称叫注解。它提供了一种安全的类似注释的机制,用来将任何的信息或元数据(metadata)与程序元素(类、方法、成员变量等)进行关联,

 能够让我们很容易的就能够调用Annotations。


2.知识剖析

Annontation原理

注解本质是一个继承了Annotation的特殊接口,其具体实现类是Java运行时生成的动态代理类。而我们通过反射获取注解时,返回的是Java运行时生成的动态代理对象$Proxy1。

通过代理对象调用自定义注解(接口)的方法,会最终调用AnnotationInvocationHandler的invoke方法。该方法会从memberValues这个Map中索引出对应的值。而memberValues的来源是Java常量池。


Annontation用法

Annotations还可以为程序的元素(类、方法、成员变量)加上更直观更明了的说明,这些说明信息是与程序的业务逻辑无关,并且供指定的工具或框架使用。

                      Annotations使用@annotation的形式应用于代码:类(class),属性(attribute),方法(method)等等。

1、生成文档。这是最常见的,也是java 最早提供的注解。

2、跟踪代码依赖性,实现替代配置文件功能。

3、在编译时进行格式检查。


什么是xml

XML是 EXtensible Markup Language(可扩展标识语言)的简写。

1)可作为一种简单的数据库,存储并检索数据;

(2)传输约定格式的文件;

(3)做软件的配置文件。

和HTML(Hypertext Markup Language 超文本标记语言)一样,同样来源于SGML.

XML 不是 HTML 的替代者,只是HTML的补充,它的用途完全不同. HTML 是将数据和显示格式混合在一起的,是用于以人可直接阅读的格式显示数据。


3.常见问题

Annotation和XML的优缺点各是什么?

Annotation 的优点

(1)保存在 class 文件中,降低维护成本。

(2)无需工具支持,无需解析。

(3)编译期即可验证正确性,查错变得容易。

(4)提升开发效率。

Annotation的缺点

(1)若要对配置项进行修改,不得不修改 Java 文件,重新编译打包应用。

(2)配置项编码在 Java 文件中,可扩展性差。

xml的优点

(1)xml 作为可扩展标记语言最大的优势在于开发者能够为软件量身【定制】适用的标记,使代码更加通俗易懂。

(2)利用 xml 配置能使软件更具扩展性。例如 Spring 将 class 间的依赖配置在 xml 中,最大限度地提升应用的可扩展性。

(3)具有成熟的验证机制确保程序正确性。利用 Schema 或 DTD 可以对 xml 的正确性进行验证,避免了非法的配置导致应用程序出错

(4)修改配置而无需变动现有程序。

xml的缺点

(1)需要解析工具或类库的支持。

(2)解析 xml 势必会影响应用程序性能,占用系统资源。

(3)编译期无法对其配置项的正确性进行验证,或要查错只能在运行期。

(4)IDE 无法验证配置项的正确性无能为力。

(5)查错变得困难。往往配置的一个手误导致莫名其妙的错误。

(6)开发人员不得不同时维护代码和配置文件,开发效率变得低下。

(7)配置项与代码间存在潜规则。改变了任何一方都有可能影响另外一方。

(8)配置文件过多导致管理变得困难。


没有一个事物是万能的,同样 xml 和 Java Annotation 都有各自的优缺点。

 且他们的优缺点恰恰是互补的,xml 的强项是 Annotation 所不具备的,而 Annotation 的优势也是 xml 所欠缺的。 这也正是时下流行的 xml + Annotation 配置的原因所在。



4.编码实战


5.扩展思考

自定义annotation

元数据(Metadata),又称中介数据、中继数据,为描述数据的数据(data about data),主要是描述数据属性(property)的信息,

用来支持如指示存储位置、历史数据、资源查找、文件记录等功能。

元注解:在创建注解的时候,需要使用一些注解来描述自己创建的注解,就是写在@interface上面的那些注解,这些注解被称为元注解,如在Override中看到的@Target、@Retention等。

@Documented: 用于标记在生成javadoc时是否将注解包含进去。

@Target:用于定义注解可以在什么地方使用,默认可以在任何地方使用,也可以指定使用的范围

@Constraint:用于校验属性值是否合法

@Retention:注解的声明周期,用于定义注解的存活阶段,可以存活在源码级别、编译级别(字节码级别)、运行时级别

@Inherited:允许子类继承父类中的注解,可以通过反射获取到父类的注解


自定义注解类编写的一些规则:

  1. Annotation型定义为@interface, 所有的Annotation会自动继承java.lang.Annotation这一接口,并且不能再去继承别的类或是接口.

  2. 参数成员只能用public或默认(default)这两个访问权修饰

  3. 参数成员只能用基本类型byte,short,char,int,long,float,double,boolean八种基本数据类型和String、Enum、Class、annotations等数据类型,以及这一些类型的数组.

  4. 要获取类方法和字段的注解信息,必须通过Java的反射技术来获取 Annotation对象,因为你除此之外没有别的获取注解对象的方法

  5. 注解也可以没有定义成员, 不过这样注解就没啥用了

PS:自定义注解需要使用到元注解


6.参考文献


https://blog.csdn.net/qsbbl/article/details/78628472



7.更多讨论

(1)注解的使用场景?
可以通过注解的声明周期来分析注解的使用场景:
SOURCE源码级别:给编译器使用,如@Override、@Deprecated 等, 这部分开发者应该使用的场景不多

CLASS:字节码级别,这部分也很少见到

RUNTIME:运行时级别,这个是最多的,几乎开发者使用到的注解都是运行时级别,运行时注解常用的有以下几种情况
注解中没有任何属性的,空的注解,这部分注解通常起到一个标注的作用,如@Test、@Before、@After,通过获取这些标记注解在逻辑上做一些特殊的处理
可以使用约束注解@Constraint来对属性值进行校验,如@Email, @NotNull等
可以通过在注解中使用属性来配置一些参数,然后可以使用反射获取这些参数,这些注解没有其他特殊的功能,只是简单的代替xml配置的方式来配置一些参数。使用注解来配置参数这在Spring boot中得到了热捧,如@Configuration

(2)怎么选择xml 和annotation?
关于配置方式xml vs annotation, 一般使用xml配置一些和业务关系不太紧密的配置,使用注解配置一些和业务密切相关的参数。

(3)@controller这个注解可以用xml配置文件代替吗?

答:理论上来讲,所有的注解都可以用xml配置文件代替,只不过这个@controller不用而已,太麻烦又没有必要。


评论

[郑州|结业弟子]JAVA-张泉良 发表于 2019-03-08 15:20:54 #1

那么,自定义注解的场景有哪些呢?

回复

请您登录 后进行评论