【发布时间】:2015-05-08 03:32:57
【问题描述】:
在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注入的优先级较低的候选者。默认优先级,我假设它已应用于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