gpt4 book ai didi

grails - 在 Grails 中注入(inject)不同的服务

转载 作者:行者123 更新时间:2023-12-02 09:07:49 24 4
gpt4 key购买 nike

是否可以让两个服务实现相同的接口(interface),并在运行时决定为 Grails 中的接口(interface)注入(inject)什么服务?

例如

MyAService implements MyInterface {
...
}

MyBService implements MyInterface {
...
}

其他服务仅引用 MyInterface,您可以根据配置设置或注入(inject)什么服务来决定?

最佳答案

Grails 使用按名称自动注入(inject)进行基于约定的注入(inject),例如 def fooService,并且服务等工件会在启动时自动注册。如果您在 resources.groovy 中配置 bean 及其依赖项,您将拥有更多控制权,并且可以使用 Groovy 代码来应用逻辑。

但我会让事情变得简单并在 BootStrap.groovy 中完成工作。在目标类中添加公共(public)字段(例如 def myService)或私有(private)字段和 setter(例如 void setMyService(service) { this.myService = service })。然后在 BootStrap 中,依赖注入(inject)所有可能的候选者并手动注入(inject)正确的候选者。类似于

class BootStrap {

def myAService
def myBService
def theDestinationBean

def init = { servletContext ->
if (<some condition>) {
theDestinationBean.myService = myAService
}
else {
theDestinationBean.myService = myBService
}
}
}

由于它是 Groovy,您可能不需要该接口(interface),但它不会有什么坏处,并且可以为您提供一些编译时安全性。

关于grails - 在 Grails 中注入(inject)不同的服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22106512/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com