Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.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 Spring开发人员不推荐使用哪种注释@Autowired?为什么?_Java_Spring - Fatal编程技术网

Java Spring开发人员不推荐使用哪种注释@Autowired?为什么?

Java Spring开发人员不推荐使用哪种注释@Autowired?为什么?,java,spring,Java,Spring,开发人员不推荐从自动连接bean的方式中选择哪一种?为什么 (我是说为什么他们不建议使用@Autowired) 当我们为Spring指定它应该嵌入到其他类中的bean时,例如,我们使用@Autowired 但不建议使用此注释,但建议使用数据绑定 以下是另一个答案(可能与主要问题间接相关) 谁能解释这个问题中的陷阱,以及在构造函数或setter上设置注释有什么不同,在哪种情况下更可取?Spring团队在他们的 基于构造函数还是基于setter的DI 因为您可以混合使用基于构造函数和基于setter

开发人员不推荐从自动连接bean的方式中选择哪一种?为什么

(我是说为什么他们不建议使用@Autowired)

当我们为Spring指定它应该嵌入到其他类中的bean时,例如,我们使用@Autowired

但不建议使用此注释,但建议使用数据绑定

以下是另一个答案(可能与主要问题间接相关)


谁能解释这个问题中的陷阱,以及在构造函数或setter上设置注释有什么不同,在哪种情况下更可取?

Spring团队在他们的

基于构造函数还是基于setter的DI

因为您可以混合使用基于构造函数和基于setter的DI,所以这是一个很好的选择 将构造函数用于强制依赖项和 用于可选依赖项的setter方法或配置方法。 请注意,在setter方法上使用@Required注释可以 用于使属性成为必需的依赖项;然而, 使用参数的编程验证进行构造函数注入是可行的 更好

Spring团队通常提倡构造函数注入,因为它允许 您将应用程序组件实现为不可变对象,并确保 所需的依赖项不为null。此外,, 构造函数注入的组件总是返回给客户端 (调用)处于完全初始化状态的代码。作为旁注,一个大的 构造函数参数的数量是一种糟糕的代码气味,这意味着 类可能有太多的职责,应该进行重构以 更好地解决问题的适当分离

Setter注入应主要用于可选的 可以在 班级。否则,必须在所有位置执行非空检查 代码使用依赖项。塞特注射的一个好处是 setter方法使该类的对象易于重新配置 或者以后再注射。因此,通过JMX MBeans进行管理是一项非常重要的任务 setter注入的引人注目的用例

使用对特定类最有意义的DI样式。 有时,在处理您不支持的第三方类时 有了源头,选择就为你了。例如,如果 第三方类不公开任何setter方法,然后是构造函数 注射可能是唯一可用的DI形式


因此,通常建议对必填字段使用构造函数注入,对可选字段使用setter注入,但要小心,因为如果使用setter注入,就放弃了不可变的优点。不鼓励的是字段注入,因为它需要使用java反射机制来填充字段,这导致您的代码与spring的机制紧密结合,并且使您的单元测试更加困难,因为您无法通过构造函数或setter轻松地传递模拟对象。

Spring团队在他们的

基于构造函数还是基于setter的DI

因为您可以混合使用基于构造函数和基于setter的DI,所以这是一个很好的选择 将构造函数用于强制依赖项和 用于可选依赖项的setter方法或配置方法。 请注意,在setter方法上使用@Required注释可以 用于使属性成为必需的依赖项;然而, 使用参数的编程验证进行构造函数注入是可行的 更好

Spring团队通常提倡构造函数注入,因为它允许 您将应用程序组件实现为不可变对象,并确保 所需的依赖项不为null。此外,, 构造函数注入的组件总是返回给客户端 (调用)处于完全初始化状态的代码。作为旁注,一个大的 构造函数参数的数量是一种糟糕的代码气味,这意味着 类可能有太多的职责,应该进行重构以 更好地解决问题的适当分离

Setter注入应主要用于可选的 可以在 班级。否则,必须在所有位置执行非空检查 代码使用依赖项。塞特注射的一个好处是 setter方法使该类的对象易于重新配置 或者以后再注射。因此,通过JMX MBeans进行管理是一项非常重要的任务 setter注入的引人注目的用例

使用对特定类最有意义的DI样式。 有时,在处理您不支持的第三方类时 有了源头,选择就为你了。例如,如果 第三方类不公开任何setter方法,然后是构造函数 注射可能是唯一可用的DI形式


因此,通常建议对必填字段使用构造函数注入,对可选字段使用setter注入,但要小心,因为如果使用setter注入,就放弃了不可变的优点。不鼓励的是字段注入,因为它需要使用java反射机制来填充字段,这导致您的代码与spring的机制紧密结合,并且使您的单元测试更加困难,由于无法通过构造函数或setter轻松传递模拟对象。

这不是重复的,请仔细阅读问题。关于在构造函数或setter上安装的问题是作为主要问题的补充,或者更确切地说是作为配套问题。这不是重复的,请仔细阅读问题