在 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
,因为 G
和 M
都实现了 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'}
在Grails 2.5.0中,Grailsclass,我们称之为G
,它实现了某个接口,我们称之为I
;我自己也创建了一个新的 class,我们称它为 M
,它也实现了 I
.
不幸的是,第三方 Grails 插件使用以下方式注入:
@Autowired
I i
抛出 NoUniqueBeanDefinitionException
,因为 G
和 M
都实现了 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'}