1

我遇到了 Spring 的@Required注解,我不确定何时使用它。

我的主要疑问是:什么可能导致未设置 Spring 依赖项从而证明使用@Required?

4

2 回答 2

2

首先查看参考文档中的4.9.1 @Required。恕我直言,当自动装配如此普遍使用时,此注释的使用受到限制。

在 XML 时代这非常好 - 如果您忘记在 XML 中定义但<property name="movieFinder" .../>记得放置字段或设置器,Spring 会抛出异常。@RequiredmovieFinder

请注意,此注释不会使您摆脱最常见的 Spring 新手错误 -new在容器控制之外使用运算符手动创建 bean。Spring 必须对 bean 进行后处理并仅在容器实际创建带注释的类时才抛出异常(但未注入依赖项)。

这些天你只需用@Autowired//注释该字段@Resource@Inject如果找不到bean(否则离开null)抛出异常(没有这样的bean或类似的)。如果您可以@Required添加注释,那么是什么阻止您用 XML 替换它@Autowired并完全摆脱它?

话虽如此,对于某些人来说@Required可能有很好的文档价值。

于 2012-07-09T16:26:46.193 回答
1

在很大程度上是为了防止开发人员错误。

有时开发人员认为某些内容会出现在实际不存在的上下文中,原因有很多,包括:

  1. 只是忘记添加 bean
  2. 依赖问题(当依赖组件被自动检测时)
  3. 类型/包装误解

在这些情况下,最好在上下文加载时失败,而不是稍后出现 NPE。

于 2012-07-09T16:25:29.930 回答