Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用@Autowired是否被认为是一种良好的做法?_Java_Spring_Autowired - Fatal编程技术网

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?它们都不容易测试,也不支持有效的模拟。此外,我怎么会让定位依赖项的代码“污染”我的业务逻辑呢?