Java 使用@Autowired是否被认为是一种良好的做法?
我有一个问题困扰了我一段时间,因为我无法找到一个明确的答案,我决定在这里问它 使用Java 使用@Autowired是否被认为是一种良好的做法?,java,spring,autowired,Java,Spring,Autowired,我有一个问题困扰了我一段时间,因为我无法找到一个明确的答案,我决定在这里问它 使用@Autowired是否被认为是一种良好的做法?换句话说,在生产代码中使用自动布线有意义吗?或者我应该将其视为轻型项目中的“好东西”,而不是“严肃的业务”中的“好东西”?还是仅仅是意见的问题 我一直觉得,通过autowiring,开发者基本上放弃了提供一组“明确的”注入规则,而是依靠一个框架来正确地完成。我可能听起来很保守,但对我来说,这听起来不是一个好的设计决策。在生产代码中使用@Autowired注释没有什么错
@Autowired
是否被认为是一种良好的做法?换句话说,在生产代码中使用自动布线有意义吗?或者我应该将其视为轻型项目中的“好东西”,而不是“严肃的业务”中的“好东西”?还是仅仅是意见的问题
我一直觉得,通过autowiring,开发者基本上放弃了提供一组“明确的”注入规则,而是依靠一个框架来正确地完成。我可能听起来很保守,但对我来说,这听起来不是一个好的设计决策。在生产代码中使用
@Autowired
注释没有什么错
您可以使用ApplicationContext
以及注释本身的一些属性(如required)来控制注入。因此,开发人员当然不会“放弃”对注入方式的控制
我使用
Autowired
的理由是,您可以修改一个配置并更改类的Autowired
注入的所有实例。这可以使重构公共类的痛苦大大减轻。在生产环境中,@Autowired
肯定没有问题。它的存在是为了让您不会最终编写出保证充满bug的生产布线代码,而这些代码远不如Spring/Guice
我可能听起来很保守,但这听起来不是一个好的设计
这是我的决定
我想说,实现自己的DI框架是一个更糟糕的设计决策
确保始终将构造函数注入与
@Autowired
一起使用。我想说的是,现场级自动布线只适用于测试依赖性。另外,我通常使用JSR-330@Inject
而不是@Autowired
两个方向都有一百万个参数,这意味着这主要是个人偏好的问题。我建议从更长远的角度来看问题,因为StackOverflow通常不会回答基于意见的问题。除此之外,如何获得依赖服务的实例?调用构造函数?调用工厂方法?调用JNDI/ServiceLocator?它们都不容易测试,也不支持有效的模拟。此外,我怎么会让定位依赖项的代码“污染”我的业务逻辑呢?