Par*_*ody 2 java spring dependency-injection
我一般都是Spring和DI的新手.但是根据我的阅读,DI使您能够使用类似框架轻松交换实现Spring.在XML bean配置方面,我可以理解它的价值,因为完成交换实现时根本不需要更改代码.但是,如果我们使用类似的注释@Autowired或@Qualifier......我们需要更改代码.那么为什么我们要在基于XML的配置上使用注释呢?
这实际上是围绕2009年Spring 3.0问世并且JavaConfig被添加到核心系统库的时候热烈讨论的话题.
从理论上讲,能够外部化应用程序设置是一件好事.然而,事实证明,在实践中有两组不同的设置选择:应用程序形状或依赖图,以及API密钥,数据库连接字符串等特定值,它们在不同环境之间变化但通常不会改变方式豆是有线的.
经验表明,依赖图本质上是您在XML中表达的,几乎从未改变过,如果不对相应的实现代码进行更改,因此在XML中定义图形几乎没有什么现实益处.另一方面,@Bean用Java 编写方法意味着在需要时测试配置要容易得多,编译器可以确保类型安全,并且决策逻辑(例如条件)更容易实现.
此外,注释的可用性意味着可以在Java中相当容易地扩展用于配置的特定于域的语言 - 只需创建一个新的注释及其附带的处理器(例如@ConditionalOnProperty); Spring Boot本身就是这个模型灵活性的一个极端例子.另一方面,在XML中,将新标记或属性注入模式更加麻烦.
有时XML可能仍然是更好的选择(我特别喜欢用它来编写Spring Integration管道,它在XML中比在Java DSL中更容易阅读),但现实世界的好处并非如此在大多数情况下都是有价值的,并且代码的安全性和灵活性已经胜出.