java - @Autowired 与 XML

标签 java spring dependency-injection

一般来说,我是 Spring 和 DI 的新手。但据我所知,DI 使您能够使用 Spring 等框架非常轻松地更换实现。当谈到 XML bean 配置时,我可以理解那里的值(value),因为根本不需要更改代码来完成可切换的实现。但是,如果我们使用像 @Autowired@Qualifier 这样的注释...我们将需要更改代码。那么为什么我们要在基于 XML 的配置上使用注释呢?

最佳答案

这实际上是在 2009 年 Spring 3.0 发布和 JavaConfig 被添加到核心系统基础时的热门话题。

从理论上讲,能够外部化应用程序设置是一件很棒的事情。然而,事实证明,在实践中有两组不同的设置选择:应用程序形状或依赖关系图,以及 API key 、数据库连接字符串等特定值,它们因环境而异,但通常不会改变方式这些 bean 是有线的。

经验表明,依赖图(本质上是您用 XML 表达的内容)几乎永远不会更改,除非同时更改随附的实现代码,因此定义该图在现实世界中几乎没有什么好处在 XML 中。另一方面,用 Java 编写 @Bean 方法意味着在需要时测试配置要容易得多,编译器可以确保类型安全,决策逻辑(例如条件)更容易实现。

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

有时 XML 可能仍然是更好的选择(我特别使用它来编写 Spring Integration 管道,它在 XML 中比在 Java DSL 中更容易阅读),但现实世界的好处结果证明在大多数情况下并没有那么有值(value),配置作为代码的安全性和灵 active 已经胜出。

关于java - @Autowired 与 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49617726/

相关文章:

java - 如何在android中检查拖放是否为空

java - 将函数传递给 JavaPairRDD<K,V> 中的 KEY

json - Camel Route/ActiveMQ 解码 JSON 并发送到方法

c# - ASP.NET Core 依赖注入(inject),带参数注入(inject)

java - 为静态和实例可访问性注入(inject)数据库实例

java - Hibernate 实体代理初始化

Java新手: Return parameter not reassigned after recursive loop

java - 在 Spring 4.2 中注入(inject)静态变量

java - 在 ClientInterceptor 中使用配置文件属性

php - 如何在 Laravel 之外使用 Laravel 的 IOC 容器进行方法注入(inject)