JAVA注解机制与XML解析

注解是用于给Java代码附加元数据,可在编译时或运行时解析并处理这些元数据。

1.注解的作用

生成文档,通过代码里标识的元数据生成javadoc文档。
编译检查,通过代码里标识的元数据让编译器在编译期间进行检查验证。
编译时动态处理,编译时通过代码里标识的元数据动态处理,例如动态生成代码。
运行时动态处理,运行时通过代码里标识的元数据动态处理,例如使用反射注入实例。

2.注解与xml的区别

注解:是一种分散式的元数据,与源代码紧绑定。
xml:是一种集中式的元数据,与源代码无绑定

注解配置和 XML 配置的适用场合:
  注解配置不一定在先天上优于 XML 配置。如果 Bean 的依赖关系是固定的,(如 Service 使用了哪几个 DAO 类),这种配置信息不会在部署时发生调整,那么注解配置优于 XML 配置;反之如果这种依赖关系会在部署时发生调整,XML 配置显然又优于注解配置,因为注解是对 Java 源代码的调整,需要重新改写源代码并重新编译才可以实施调整。

  如果 Bean 不是自己编写的类(如 JdbcTemplate、SessionFactoryBean 等),注释配置将无法实施,此时 XML 配置是唯一可用的方式。

  所以在现实应用中,我们往往需要同时使用注释配置和 XML 配置,对于类级别且不会发生变动的配置可以优先考虑注释配置;而对于那些第三方类以及容易发生调整的配置则应优先考虑使用 XML 配置。Spring 会在具体实施 Bean 创建和 Bean 注入之前将这两种配置方式的元信息融合在一起。

XML配置的优缺点:
优点:

  1. XML配置方式进一步降低了耦合,使得应用更加容易扩展,即使对配置文件进一步修改也不需要工程进行修改和重新编译。
  2. 在处理大的业务量的时候,用XML配置应该更加好一些。因为XML更加清晰的表明了各个对象之间的关系,各个业务类之间的调用。同时spring的相关配置也能一目了然。
缺点:
  配置文件读取和解析需要花费一定的时间,配置文件过多的时候难以管理,无法对配置的正确性进行校验,增加了测试难度。

注解配置的优缺点:
优点有:

1.在class文件中,可以降低维护成本,annotation的配置机制很明显简单
2.不需要第三方的解析工具,利用java反射技术就可以完成任务
3.编辑期可以验证正确性,差错变得容易
4.提高开发效率
缺点有:
1.如果需要对于annotation进行修改,那么要重新编译整个工程
2.业务类之间的关系不如XML配置那样容易把握。
3.如果在程序中annotation比较多,直接影响代码质量,对于代码的简洁度有一定的影响

3.注解的分类

1.元注解
  元注解是用于定义注解的注解,包括 @Retention@Target@Inherited@Documented
@Retention用于标明注解被保留的阶段;
@Target用于标明注解使用的范围;
@Inherited用于标明注解可继承;
@Documented用于标明是否生成javadoc文档。

2.Java自带的标准注解
  @Override,@Deprecated,@SuppressWarnings。用这些注解标明后编译器就会进行检查。
@Override用于标明重写某个方法
@Deprecated标明某个类或方法过时
@SuppressWarnings标明要忽略的警告

3.自定义注解
  可以根据自己的需求定义注解,并可用元注解对自定义注解进行注解。

自定义注解:

@Documented
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {
    ...
}
4. 注解的处理(实现原理)

编译时处理、运行时处理

1.编译时处理(注解处理器)
  在编译时处理的注解使用注解处理器(Annotation Processor)。注解处理器是javac的一个工具,它用来在编译时扫描和处理注解。(注解处理器不能修改已经存在的Java类(即不能向已有的类中添加方法),只能生成新的Java类。 )
  在编译期扫描.java文件的注解,并传递到注解处理器,注解处理器可根据注解生成新的.java文件,这些新的.java文件原来的.java一起被javac编译。

优点:
1:不在运行时进行操作,所以对程序的性能不会有什么影响
缺点:
1:无法对原来的.java文件进行修改
2:会生成额外的.java文件
3:因为是在编译期进行处理注解,所以会对编译速度产生影响

2.运行时处理(jdk动态代理+反射)
  注解的本质是一个接口,接口是没有构造器的,Java对注解实现动态代理生成了它的子类,然后使用反射的机制去获得这个类(注解通过动态代理后的子类)。
  缺点:通过反射会影响运行效率。

5. xml的解析方式

1、DOM解析;2、SAX解析;3、JDOM解析;4、DOM4J解析

1.DOM解析
  DOM(Document Object Model),即文档对象模型。在应用程序中,DOM分析器将整个XML文档转换成一颗DOM树放在内存中,通过DOM接口,应用程序可以在任何时候访问XML文档中的任何一部分数据,这种利用DOM接口的机制也被称作随机访问机制。当文档比较大或者结构比较复杂时,对内存的需求就比较高。对于结构复杂的树的遍历也是一项耗时的操作。

优点:
1、形成了树结构,有助于更好的理解、掌握,且代码容易编写。
2、解析过程中,树结构保存在内存中,方便修改。
缺点:
1、由于文件是一次性读取,所以对内存的耗费比较大。
2、如果XML文件比较大,容易影响解析性能且可能会造成内存溢出。

2.SAX解析
  与DOM不同,SAX提供的访问模式是一种顺序访问模式,这是一种快速读写XML数据的方式。当使用SAX分析器对XML文档进行分析时,会触发一系列事件,并激活相应的事件处理函数,应用程序通过这些事件处理函数实现对XML文档的访问,因而SAX接口也被称作事件驱动接口。

优点:
1、采用事件驱动模式,对内存耗费比较小。
2、适用于只处理XML文件中的数据时。
缺点:
1、编码比较麻烦。
2、很难同时访问XML文件中的多处不同数据。

3.JDOM解析
  JDOM方法是根据DOM方法的众多繁琐操作进行包装得到的。
优点:
a、DOM方式的优点:查找方便,可以修改
缺点
a、DOM方式的缺点:装载整个文档,对内存容量要求高

DOM4J解析
  Dom4j是目前最流行、最好用的XML解析工具,解析XML的速度最快。
  DOM4j解析xml的函数上与JDOM差不多,过程都是一样的;但由于底层使用了Xpath等方法加快了索引,所以检索性能更快。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值