在 Grails 中,指定应该使用实现相同接口的两个 类 中的哪一个进行注入

In Grails, specifying which of two classes implementing the same interface should be used for injection

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

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

@Autowired
I i

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

如何指定对于 I 的所有注入,应该使用 class G

我只想注射 class M 注射如下:

def m

M m

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

我知道这必须在 Grails 中的某处记录 and/or Spring,只是我在寻找答案时得到了很多虚假结果。

一个可能更简单的逆向问题是如何指定 M 应该 用于类型 I 的注入,而不是我原来的问题是如何指定 M 不应 用于 I.

类型的注入

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

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