编辑
?
在昨天发布的文章《spring boot 基于注解方式配置 datasource》一文中凯哥简单的对 xml 配置和注解配置进行了比较. 然后朋友看到文章后, 就问: 那你说说这两种区别.
编辑
?
凯哥当时就回答: 注解的方便. 如果再深入呢? 还真说不明白.
是啊, 现在都在说注解好, 但是注解和 xml 比较起来有哪些优点呢? xml 又为什么不好呢? 有没有深入思考过么? 以下内容是凯哥从网上找的并加以理解的.
想要弄清楚这个, 我们先来看看 xml.
就目前 Java web 开发应用中都能见到用 xml 作为配置的身影. 在常用的框架中如: struts,spring mvc,hibernate,mybites 等这些框架中 (早期版本表现更为突出) 都有 xml 配置.
我们就来看看 xml 的优点:
xml 优点
1:xml 是集中式的元数据, 不需要和代码绑定的;
在我们开发中, xml 配置文件和代码类是区分开的. 不需要绑定到代码中
2: 使用 xml 配置可以让软件更具有扩展性;
比如, 我们在 spring 中, 我们不想使用接口而是想用接口的实现类, 这个时候只需要修改 xml 配置中 bean 的 class 值就可以了.
3: 对象之间的关系一目了然;
比如, 我们在基于 xml 配置读取配置信息, 如下图:
编辑
?
从 xml 结构中, 我们就可以看出, 在 popertyPlaceholderConfigure 类里面有个 locations 的属性, 而且是 list 集合.
再比如, 使用 xml 配置数据源的是:
编辑
?
DataSource 对象的属性一目了然.
4:xml 定义: 可扩展标记语言, 标准通用标记语言的子集, 简称 xml. 从这个定义中我们可以发现, xml 最大的优势就在于, 开发者 (程序员) 能够为软件量身定做使用的标记, 使得 xml 更通俗易懂;
5: 成熟的校验机制, 来保证正确. 可以使用 Schema 或者是 DTD 来对 xml 的正确性进行校验.
6: 基于 xml 配置的时候, 只需要修改 xml 即可, 不需要对现有的程序进行修改.
7: 容易与其他系统进行数据交互. 数据共享方便
xml 缺点
虽然上面列出了很多优点, 但是 xml 也有缺点
1: 应用程序中如果使用了 xml 配置, 需要解析 xml 的工具或者是是第三方类库的支持;
2: 解析 xml 的时候必然会占用资源, 势必会影响到应用程序的性能;
以 java 为例, 无论是将 xml 一次性装置到内存中, 还是一行一行读取解析的, 都会占用资源的.
3:xml 配置文件过多, 会导致维护变得困难
4: 在程序编译期间无法对其配置项的正确性进行验证, 只能在运行期发现.
5: 出错后, 排错变得困难. 往往在配置的时候, 一个手误就会出现莫名其妙的错误(虽然事出必有妖, 但是排查真难);
比如, xml 配置 bean 信息的时候, 如果 class 的值带有空格, 这种不好检查的, 是比较麻烦的. 排查起来很费事.
6: 开发的时候, 既要维护代码又要维护配置文件, 使得开发的效率降低;
7: 代码与配置项之间有时候会存在很多 "潜规则". 改变了任意一方, 都有可能影响到另一方的使用. 这是个大坑
比如: 自定义的标记, 如果其他开发不清楚这些的话, 修改了无论是代码还是 xml 的配置, 都会导致程序不能正常运行.
8: 开发工具对 xml 的验证支持的不是很好.
比如 idea, 对 xml 正确性, 如果是自定义的, 验证就不是很好.
说完 xml 的优缺点, 我们在来看看注解的优缺点
注解优点
1: 注解的解析可以不依赖于第三方库, 可以之间使用 Java 自带的反射
2: 注解和代码在一起的, 之间在类上, 降低了维护两个地方的成本
3: 注解如果有问题, 在编译期间, 就可以验证正确性, 如果出错更容易找
4: 使用注解开发能够提高开发效率. 不用多个地方维护, 不用考虑是否存在 "潜规则"
注解缺点:
1: 修改的话比较麻烦. 如果需要对注解进行修改的话, 就需要对整个项目重新编译
2: 处理业务类之间的复杂关系, 不然 xml 那样容易修改, 也不及 xml 那样明了
3: 在程序中注解太多的话, 会影响代码质量, 代码简洁会有影响
4: 如果后来的人对注解不了解, 会给维护带来成本
5: 注解功能没有 xml 配置齐全
简单总结下两者优缺点比较
注解:
优点:
简化配置
使用起来直观且容易, 提升开发的效率
类型安全, 容易检测出问题
缺点:
修改起来比 xml 麻烦
如果不项目不了解, 可能给开发和维护带来麻烦
xml:
优点:
把类与类之间松解偶; 修改方便; 容易扩展
容易和其他系统进行数据交互
对象之间的关系一目了然
缺点:
配置冗长, 需要额外维护; 影响开发效率
类型不安全, 校验不出来, 出错不好排查
注解简单概括: 写起来比较简单, 方便, 看起来也简洁, 但是修改麻烦
xml 配置概括: 写起来比较灵活, 修改方便, 但是写和维护麻烦
大家还有什么更好的理解? 欢迎分享出来
来源: http://www.bubuko.com/infodetail-3439096.html