@Autowired vs XML

时间:2018-04-02 19:41:29

标签: java spring dependency-injection

我是Spring和DI的新手。但是根据我的阅读,DI使您能够使用Spring等框架轻松交换实现。在XML bean配置方面,我可以理解它的价值,因为代码根本不需要进行更改以完成可切换的实现。但是,如果我们使用@Autowired@Qualifier等注释,我们需要更改代码。那么为什么我们要在基于XML的配置上使用注释呢?

2 个答案:

答案 0 :(得分:5)

这实际上是2009年Spring 3.0问世以及JavaConfig被添加到核心系统基础时的热烈讨论主题。

理论上,能够外部化应用程序设置是一件好事。然而,事实证明,在实践中有两组不同的设置选择:应用程序形状或依赖图,以及API密钥,数据库连接字符串等特定值,它们在环境之间变化但通常不会改变方式豆是有线的。

经验表明,依赖图基本上就是你用XML表达的,几乎从未改变过,如果不对相关的实现代码进行更改,那么定义图的实际好处几乎没有。在XML中。另一方面,在Java中编写@Bean方法意味着在需要时测试配置要容易得多,编译器可以确保类型安全,并且决策逻辑(例如条件)更容易实现。

此外,注释的可用性意味着可以在Java中相当容易地扩展用于配置的特定于域的语言 - 只需创建一个新的注释及其附带的处理器(例如@ConditionalOnProperty); Spring Boot本身就是这个模型灵活性的一个极端例子。另一方面,在XML中,将新标记或属性注入模式更加麻烦。

有时候XML可能仍然是更好的选择(我特别喜欢用它来编写Spring Integration管道,它在XML中比在Java DSL中更容易阅读),但实际上是有益的事实证明在大多数情况下并不是那么有价值,并且代码的安全性和灵活性已经胜出。

答案 1 :(得分:0)

这不是必须的,您必须选择使用Annotations或XML,但Annotations比配置更容易使用,更快速,更易读,当您使用它时,您将在单个文件中找到所有信息,但它也有缺点。

注释更好

  

在任何稳定的东西中使用注释并定义核心   应用程序的结构。任何需要更改代码的东西   可以作为注释使用。

我建议您阅读以下链接以获取更多信息:
xml-configuration-versus-annotation-based-configuration
spring-framework-xml-vs-annotations