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

时间:2015-05-08 03:32:57

标签: spring grails dependency-injection autowired

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

不幸的是,第三方Grails插件使用:

注入
@Autowired
I i

会抛出NoUniqueBeanDefinitionException,因为G和{ M实施I,Grails不知道使用哪个。

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

我只想注入类M,例如:

def m

M m

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

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

一个可能更简单的相反问题是如何指定M 用于I类型的注入,而不是我关于如何指定{{1}的原始问题1}} 不应用于M类型的注入。

1 个答案:

答案 0 :(得分:0)

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

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