【问题标题】:Disabling Spring @Autowired by-name fallback禁用 Spring @Autowired 按名称回退
【发布时间】:2011-05-17 12:30:02
【问题描述】:

我定义了以下类:

public interface Thingy { ... }
public class Foo implements Thingy { ... }
public class Bar implements Thingy { ... }

FooBar 类都被实例化为具有相同名称的单例 bean,如

<bean id="foo" class="Foo" />
<bean id="bar" class="Bar" />

然后尝试自动装配与 bean 同名的字段,例如

@Autowired
Thingy foo;

这里,字段是用Foo 实例自动连接的,我不希望这样。如果字段名称与 bean 名称不匹配,则自动装配 falis,这是所需的。 那么,有没有办法禁用这种回退,所以在上述情况下自动装配会失败?

【问题讨论】:

    标签: java spring autowired


    【解决方案1】:

    我认为这是不可能的,相反,使用setFallbackToDefaultTypeMatchjavadoc: CommonAnnotationBeanPostProcessor

    为什么不直接重命名 bean 或类?

    【讨论】:

      【解决方案2】:

      我有几个建议可以帮助你,虽然我不确定你所要求的是否可行。

      1. 如果您没有使用注释包扫描功能来发现 bean,那么我认为在您的 spring.xml 配置中您可以指定您的 bean 具有自动装配检测模式。在所需的 bean 中,您指定一个元素“autowire”,它定义了 4 或 5 个可能的值here。我认为您想要的是“byType”。
      2. 您也可以考虑使用@Qualifier 注释。当您的应用程序上下文中有多个相同类型的 bean 时,这用于帮助区分您实际要使用的 bean。
      3. 使用不同的名称。也许这比您希望的要简单,但我认为这有助于解决您的问题。

      【讨论】:

        【解决方案3】:

        您可以使用 @Qualifier("beanname") ,以确保您使用正确的 bean 注入它

        【讨论】: