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与Quartz的整合可以通过XML配置或Java配置实现,可以更精细地控制作业(Job)和触发器(Trigger),并且支持集群和持久化。 - 如果需要实现分布式调度、高可用性和更复杂的调度逻辑,Quartz可能是更好的...
- **注解配置**:随着Spring的发展,注解逐渐成为配置Bean的首选方式。常用的注解包括`@Component`、`@Repository`、`@Service`和`@Controller`等。 - **反射机制**:Spring利用Java反射API来实例化Bean,并设置...
2. **配置复杂性:** 尽管Spring提供了XML和注解两种配置方式,但在某些场景下仍然可能出现配置文件过于复杂的情况,这可能导致项目难以维护。 #### Hibernate框架 **优点:** 1. **ORM支持:** Hibernate是一个...
* 更加高效:使用纯注解配置可以提高 Spring MVC 应用程序的性能,因为它减少了 XML 配置文件的解析和处理时间。 纯注解配置的实现: 1. 首先,需要在 Maven 项目中添加 Spring MVC 的依赖项,例如: ```xml ...
1. **基于XML的全局事务配置**:这种方式通过在Spring配置文件中设置`<tx:advice>`和`<aop:config>`元素来实现事务管理。相比于第一种方式,这种方式更加简洁,适用于所有业务逻辑Bean。 2. **基于注解的事务配置**...
4. **注解配置与XML配置的比较**:对比两种配置方式的优缺点,理解在什么情况下更适合使用注解配置或XML配置。 5. **无XML配置的应用**:探讨如何在没有XML配置的情况下构建Spring应用,尤其是在Spring Boot框架中...
在Spring MVC项目中,XML配置和Java配置各有优缺点。XML配置清晰明了,易于阅读和维护,但可能会导致大量的XML文件。相比之下,Java配置更加简洁,易于整合,且能利用Java的强大功能,如类型安全和代码提示,但它...
Spring 事务管理是其核心特性之一,用于确保在执行数据库操作时的一致性和...理解每种方式的工作原理和优缺点,可以帮助你更好地进行事务配置。Spring 的事务管理机制确保了数据的一致性,是构建企业级应用的重要基石。
虽然现代Spring应用倾向于使用Java配置或注解配置,但了解如何在Spring官网上查找XML基础配置文件仍然是非常有价值的。下面我们将深入探讨这个过程,并扩展一些关于XML配置文件的基础知识。 1. **访问Spring官网** ...
Spring 3.0 提供了两种事务管理配置方法:基于 XML 的事务管理和基于 @Transactional 的事务管理,这两种方法都是为了实现事务管理的目标,分别具有不同的配置方式和优缺点。 基于 XML 的事务管理 这种方法不需要...
在Spring框架中,事务管理是核心功能之一,它允许开发者以声明式或...XML配置和注解方式各有优缺点,XML配置灵活且易于集中管理,而注解方式则简化了代码,提高了可读性。在实际开发中,通常结合使用,以达到最佳效果。
在Spring框架中,DAO...以上就是Spring对DAO支持的多种配置方式,它们各有优缺点,可以根据项目的具体需求和技术栈选择最合适的实现。在实际开发中,通常会结合使用不同的DAO支持,以实现高效、灵活的数据访问层。
两种方式各有优缺点,注解配置更简洁,但 XML 配置提供了更大的灵活性。 **JSTL 应用** JSP Standard Tag Library (JSTL) 是一组标准标签库,用于在 JSP 页面中处理常见任务,如迭代、条件判断、XML 处理等。在 ...
2. **注解配置**:使用`@Aspect`注解定义切面,`@Before`、`@After`、`@Around`等注解定义通知,这种方式更简洁。 3. **Java配置**:通过Java类配置切面和通知,结合了XML和注解的优点,既具有灵活性又易于管理。 ...
3. **配置统一**:通过XML或注解方式进行配置,使得配置信息集中,易于管理和维护。 4. **面向接口编程**:鼓励基于接口而非具体实现进行编程,增加代码的可扩展性和可测试性。 5. **单元测试**:Spring应用易于编写...
1. **配置文件较多:**虽然Spring框架可以通过注解来简化配置,但是对于一些复杂的应用场景,仍然需要编写大量的XML配置文件。 2. **学习曲线陡峭:**Spring框架的功能强大,但这也意味着需要花费更多的时间来学习其...
2. **配置复杂**:虽然有XML和注解两种配置方式,但大量的配置文件可能会增加项目管理的复杂性。 **三、Hibernate** Hibernate是一个优秀的对象关系映射(ORM)工具,它简化了数据库操作。它的优点包括: 1. **简化...