【问题标题】:Autowiring priority自动装配优先级
【发布时间】:2011-07-22 00:15:19
【问题描述】:
<beans default-autowire="byType" />

表示如果所需类型的 bean 不超过 1 个,bean 的所有字段将自动注入依赖项。

我想知道在有多个所需类型的 bean 的情况下,是否有一种方法可以为自动装配定义某种优先级顺序(例如基于命名约定)。
提前致谢。

编辑:我只是想补充一点,我目前正在处理的项目中不允许使用@Component 和@Qualifier 等注解。

【问题讨论】:

  • 所以你有一个问题,但你(出于无法解释的神秘原因)“不允许”使用该解决方案......这感觉更像是一个愚蠢的游戏(任意限制是有意义的)而不是对我来说是一个真正的问题。也许不是寻找适合任意要求的时髦解决方案,而是解决要求的时候了:) 如果有真正的原因注释不是正确的解决方案,请解释。
  • @Wouter :你说得对,我应该更清楚为什么存在这样的限制,我正在做的项目是一个已经编码完整功能的企业应用程序,我正在尝试做的是将spring集成到应用程序中,并使框架处理对象的实例化。有数千个已经存在的类需要由 spring 处理(准确地说是超过 20000 个),不可能遍历每个类并手动对其进行注释,这将需要很长时间,这就是为什么我试图以编程方式执行布线

标签: java spring configuration spring-mvc dependency-injection


【解决方案1】:

不,没有,但您可以根据需要为每个 bean 覆盖此行为,例如在需要时指定类似的内容:

<beans default-autowire="byType" >
    <bean id="..." autowire="byName">
        ....
    </bean>
</beans>

从 spring 2.5 开始,当使用 &lt;context:component-scan/&gt; 通过 @Autowired 自动装配 bean 时,如果有多个相同类型的 bean,您还可以在需要按名称指定 bean 的地方添加 @Qualifier

正如in the spring documentation 所说,有几种不同的方式来指定自动装配:

  • no - 不自动装配,这是默认设置
  • byType - 属性类型必须匹配 bean 类型,如果存在多个该类型的 bean,则抛出异常
  • byName - bean 名称必须与属性名称匹配
  • constructor - 与 byType 基本相同,但对于构​​造函数,spring 会选择匹配最多的构造函数
  • autodetect - 与 byType 相同,除非没有默认构造函数,它会退回到构造函数自动装配

【讨论】:

  • 谢谢,但这并不是我真正需要的,事实上,我所有的 bean 都会被自动检测到(我正在使用 ,所以我不能这样做。
  • @Medhi 如果您正在扫描组件,那么您可以使用@Autowired 注释,然后在需要的地方添加@Qualifier,我会更新myanswer。
  • 我不知道你是否注意到我的编辑,但正如我上面所说,我不允许在我的代码中使用任何类型的注释。
  • 这很奇怪,context:component-scan 是专门用来使用注解的。
  • @ericam no context:component-scan 不仅适用于注释,还适用于用户定义的过滤器
猜你喜欢
  • 2017-11-01
  • 2016-07-21
  • 1970-01-01
  • 1970-01-01
  • 2010-09-28
  • 2015-05-13
  • 1970-01-01
  • 2019-09-17
  • 2015-06-15
相关资源
最近更新 更多