禁用Spring @Autowired by-name fallback

时间:2011-05-17 12:30:02

标签: java spring autowired

我定义了以下类:

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并且需要。 那么,有没有办法禁用这种后备,所以在上述情况下自动装配会失败?

3 个答案:

答案 0 :(得分:2)

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

为什么不重命名你的bean或你的班级?

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

你可以使用@Qualifier(“beanname”)来确保你用正确的bean注入它