spring - 在 Grails 中,指定实现相同接口(interface)的两个类中的哪一个应该用于注入(inject)

标签 spring grails dependency-injection autowired

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

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

@Autowired
I i

抛出 NoUniqueBeanDefinitionException , 因为两者 G & M实现I ,而 Grails 不知道该使用哪个。

如何为 I 的所有注入(inject)指定它? , 类(class) G应该用吗?

我只想注入(inject)类M对于像这样的注入(inject):
def m

或者
M m

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

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

一个可能更简单的相反问题是如何指定 M应该用于 I 类型的注入(inject),而不是关于如何指定 M 的原始问题不应用于 I 类型的注入(inject).

最佳答案

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

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

关于spring - 在 Grails 中,指定实现相同接口(interface)的两个类中的哪一个应该用于注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30115308/

相关文章:

grails - beforeDelete() 中的服务访问

c++ - 如何在不破坏主框架的情况下终止 wxWidgets 消息循环?

grails - 在 Grails 中查找 session 用户的公共(public) IP 地址

grails - Grails 3-有条件地忽略Spock测试

asp.net - 我没有使用依赖注入(inject),但我得到 "An error occurred when trying to create a controller of type"

c# - 默认构造函数是否应该将 NULL 传递给另一个构造函数以创建依赖项?

java - 无法将 Spring Boot war 部署到 Elastic Beanstalk

Spring jsp 形式的 Eclipse 警告 “List is a raw type”

spring - 如果用户之前已授权访问,如何绕过 Spring security OAuth2 中的访问确认步骤?

Spring运行时对象/bean创建