/src/groovy 中的动态自动装配

Dynamic autowire in /src/groovy

我希望能够在我的 Groovy Classes 和 /src/groovy

中包含服务

我找到了一个解决方案:

myBean(MyBean) { bean ->        
    bean.autowire = 'byName'
}

但我不想在 resources.groovy 中为所有 Class 创建此条目,那么是否有在特定文件夹中自动装配所有 类 的解决方案?

我正在使用 grails 2.4.3

这似乎与这个问题类似:Grails 2.x service injection in Groovy/src

我们使用和建议的是通过应用程序上下文获取服务:

import grails.util.Holders
...
def myService = Holders.grailsApplication.mainContext.getBean 'myService'

它不是完全自动连接的,但似乎是将服务接入 src/groovy 的最佳方式。

编辑:也适用于 Grails 3

您可以在 src/groovy 中创建一个 class com.example.MyClass 一个 Spring bean,方法是将以下内容添加到 BuildConfig.groovy

grails.spring.bean.packages = ['com.example']

并用 @Component 注释 class,例如

@Component
class MyClass {

    @Value('${conf.apiVersion}')
    String apiVersion

    @Autowired
    SomeService someService
}

如上所示,您可以使用 Spring 注释(例如 @Value@Autowired 来依赖注入 class。我发现这是一种比修改 resources.groovy.

更方便的注册 Spring bean 的方法