Spring注解配置和xml配置优缺点比较
Spring注解配置和xml配置优缺点比较
在昨天发布的文章《spring boot基于注解方式配置datasource》一文中凯哥简单的对xml配置和注解配置进行了比较。然后朋友看到文章后,就问:那你说说这两种区别。
额,说真的,还真把凯哥给问蒙圈了。本文来源:凯哥Java【kaigejava】
凯哥当时就回答:注解的方便。如果再深入呢?还真说不明白。
是啊,现在都在说注解好,但是注解和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配置概括:写起来比较灵活、修改方便,但是写和维护麻烦
大家还有什么更好的理解?欢迎分享出来
Spring注解配置和xml配置优缺点比较的更多相关文章
- spring注解机制和XML配置机制之间的比较
XML配置的优缺点: 优点有:1. XML配置方式进一步降低了耦合,使得应用更加容易扩展,即使对配置文件进一步修改也不需要工程进行修改和重新编译.2. 在处理大的业务量的时候,用XML配置应该更加好一 ...
- Spring的注解配置与XML配置之间的比较
注释配置相对于 XML 配置具有很多的优势: 它可以充分利用 Java 的反射机制获取类结构信息,这些信息可以有效减少配置的工作. 如:使用 JPA 注释配置 ORM 映射时,我们就不需要指定 PO ...
- Spring装配Bean---使用xml配置
声明Bean Spring配置文件的根元素是<beans>. 在<beans>元素内,你可以放所有的Spring配置信息,包括<bean>元素的声明. 除了Bean ...
- Spring的配置文件ApplicationContext.xml配置头文件解析
Spring的配置文件ApplicationContext.xml配置头文件解析 原创 2016年12月16日 14:22:43 标签: spring配置文件 5446 spring中的applica ...
- IDEA用maven创建springMVC项目和配置(XML配置和Java配置)
1.DEA创建项目 新建一个maven project,并且选择webapp原型. 然后点击next 这里的GroupId和ArtifactID随意填写,但是ArtifactID最好和你的项目一名一样 ...
- Hibernate实现有两种配置,xml配置与注释配置
hibernate实现有两种配置,xml配置与注释配置. (1):xml配置:hibernate.cfg.xml (放到src目录下)和实体配置类:xxx.hbm.xml(与实体为同一目录中) < ...
- hibernate实现有两种配置,xml配置与注释配置。<转>
<注意:在配置时hibernate的下载的版本一定确保正确,因为不同版本导入的jar包可能不一样,所以会导致出现一些错误> hibernate实现有两种配置,xml配置与注释配置. (1) ...
- Spring 中的事务操作、注解、以及 XML 配置
事务 事务全称叫数据库事务,是数据库并发控制时的基本单位,它是一个操作集合,这些操作要么不执行,要么都执行,不可分割.例如我们的转账这个业务,就需要进行数据库事务的处理. 转账中至少会涉及到两条 SQ ...
- 死磕Spring之AOP篇 - Spring AOP注解驱动与XML配置
该系列文章是本人在学习 Spring 的过程中总结下来的,里面涉及到相关源码,可能对读者不太友好,请结合我的源码注释 Spring 源码分析 GitHub 地址 进行阅读. Spring 版本:5.1 ...
随机推荐
- redis十-对快照模式分析
复制自:http://www.cnblogs.com/huangxincheng/p/5010795.html 一:快照模式 或许在用Redis之初的时候,就听说过redis有两种持久化模式,第一种是 ...
- tab选项卡,带自动播放
<!DOCTYPE html> <html> <head> <meta http-equiv="content-type" content ...
- UVA - 1153 Keep the Customer Satisfied(顾客是上帝)(贪心)
题意:有n(n<=800000)个工作,已知每个工作需要的时间qi和截止时间di(必须在此之前完成),最多能完成多少个工作?工作只能串行完成.第一项任务开始的时间不早于时刻0. 分析:按截止时间 ...
- 51nod 1429:巧克力
1429 巧克力 题目来源: CodeForces 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题 收藏 关注 现在有两个块巧克力一块大小是 的,另外一块大 ...
- iPhone系统固若金汤,为何还有人偷苹果手机去卖?
2016年初,美国FBI希望苹果开发软件用以解锁一部嫌疑人的iPhone.苹果虽然帮助FBI从疑犯iCloud账户中提取数据,但有些数据仍然不可获取.由于不知道手机密码,FBI也无法打开手机.虽然在最 ...
- 数据结构顺序表中Sqlist *L,&L,Sqlist *&L
//定义顺序表L的结构体 typedef struct { Elemtype data[MaxSize]: int length; }SqList; //建立顺序表 void CreateList(S ...
- ROS常见问题(二) 运行文件时报错environment variable ' ###_MODEL' is not set
作者在配置pibot机器人时报错: Invalid <arg> tag: environment variable 'PIBOT_MODEL' is not set. Arg xml is ...
- discuz伪静态问题(简单)
提前声明一下我用的是宝塔面板.Linux系统.Nginx Web Server.经过一上午的摸索(我很菜了),终于在一个很无语的地方成功搞了伪静态1.2.点击查看当前的 Rewrite 规则3.我的是 ...
- SQL中的LEFT/RIGHT/SUBSTRING函数
语法: LEFT(field,length) RIGHT(field,length)SUBSTRING(field,start,length) LEFT/RIGHT函数返回field最左边/最右边的l ...
- Essay写作没灵感怎么办?
进入6月了,童鞋们都在干啥呢?有人回国玩耍了,有人周游欧洲了,当然也有人还在悲催地上课写作业.但是呢不管你此刻在哪里,final essay或者dissertation都离你不远啦!可是可是,有些留学 ...