【问题标题】:In Grails, specifying which of two classes implementing the same interface should be used for injection在 Grails 中,指定实现相同接口的两个类中的哪一个应该用于注入
【发布时间】:2015-05-08 03:32:57
【问题描述】:

在Grails 2.5.0中,有一个Grails类,我们称之为G,它实现了某个接口,我们称之为I;我自己也创建了一个新类,我们称之为M,它也实现了I

不幸的是,第三方 Grails 插件使用以下方式注入:

@Autowired
I i

这会抛出一个NoUniqueBeanDefinitionException,因为GM 都实现了I,而Grails 不知道该使用哪个。

如何指定I 的所有注入都应使用G 类?

我只想注入 M 类以进行如下注入:

def m

M m

一些解决方案提到在注入站点使用@Qualifier 注释,但是,由于注入站点位于第三方插件中,如果可以避免,我不想修改该代码。我也不应该修改G 的来源,因为它来自Grails 本身。所以,我宁愿在一些配置文件中配置它,或者以某种方式注释M,使其不是I注入的候选者,或者它是I注入的优先级较低的候选者。默认优先级,我假设它已应用于G

我知道这必须记录在 Grails 和/或 Spring 的某个地方,只是我在寻找答案时得到了许多虚假结果。

一个可能更简单的相反问题是如何指定M应该用于I类型的注入,而不是我最初的问题是如何指定M不应用于I 类型的注入。

【问题讨论】:

  • 你检查过文档的spring section 吗?应该可以在grails-app/conf/spring/resources.groovy进行配置。
  • @aiolos,我实际上在几个小时前在grails-app/conf/spring/resources.groovy 中找到了一种方法:beans = {springConfig.addAlias 'i', 'g'}。我现在将创建一个答案。

标签: spring grails dependency-injection autowired


【解决方案1】:

grails-app/conf/spring/resources.groovy,添加:

beans = {springConfig.addAlias 'i', 'g'}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-09
    • 2014-08-15
    • 2022-12-03
    • 1970-01-01
    相关资源
    最近更新 更多