在阅读了此处的一些相关帖子并在团队中进行了进一步讨论后,我们得出以下结论。我希望对这里的其他人有用。
关于 XML 配置(我们一直在使用),我们决定将其保留在库定义的依赖项中(无论是由我们开发还是由第三方开发)。
根据定义,库提供特定的功能并且可以在各种场景中使用,不一定涉及 DI。因此,在我们自己开发的库项目中使用注解,会创建 DI 框架(在我们的例子中是 Spring)对库的依赖,使库在非 DI 上下文中无法使用。在我们的团队中(一般来说,恕我直言),拥有额外的依赖并不被认为是一种好的做法。
当我们组装应用程序时,应用程序上下文将定义必要的依赖关系。这将简化依赖关系跟踪,因为应用程序成为组合所有引用组件的中心单元,通常这确实是所有连接都应该发生的地方。
在为许多组件提供模拟实现时,XML 对我们也有好处,而无需重新编译将使用它们的应用程序模块。这为我们在本地或生产环境中测试运行提供了灵活性。
关于注解,我们决定在注入的组件不变的情况下使用注解可以受益——例如,在整个应用程序中只会使用某个组件的特定实现。
注解对于不会立即更改或支持依赖项的不同实现并且不太可能以不同方式组合的小型组件/应用程序非常有用(例如,对不同的构建使用不同的依赖项)。简单的微服务就属于这一类。
由注释组成的足够小的组件可以直接在不同的项目中使用,而无需相应的应用程序在其 XML 配置中覆盖它们。这将简化应用程序的应用程序依赖关系布线并减少重复设置。
然而,我们同意这些组件应该在我们的技术文档中有详细描述的依赖关系,以便在组装整个应用程序时,无需滚动代码,甚至无需加载模块即可了解这些依赖关系。 IDE。
注解配置组件的负面影响是,不同的组件可能会带来冲突的传递依赖,而最终应用程序又要解决冲突。如果这些依赖关系没有在 XML 中定义,那么解决冲突的方法就会变得非常有限,并且与最佳实践相去甚远(如果可能的话)。
因此,在使用注解时,组件必须足够成熟,知道它将使用哪些依赖项。
一般来说,如果我们的依赖项可能因不同的场景而有所不同,或者一个模块可以与不同的组件一起使用,我们决定坚持使用 XML。显然,两种方法之间必须有一个正确的平衡,并且对用法有一个清晰的想法。
关于混合方法的重要更新。最近我们有一个案例,我们为我们的 QA 团队创建了一个测试框架,它需要来自另一个项目的依赖项。该框架旨在使用注释方法和 Spring 配置类,而引用的项目有一些我们需要引用的 xml 上下文。不幸的是,测试类(我们使用带有 spring 支持的 org.testng)只能与 xml 或 java 配置类一起使用,不能将两者混合使用。
这种情况说明了混合方法会发生冲突的情况,很明显,必须丢弃一个。在我们的例子中,我们迁移了测试框架以使用 spring xml 上下文,但其他用途可能意味着相反。