ruk*_*che 5 service grails groovy dependency-injection
我需要注入一个基于域属性的服务,到目前为止我想出了以下内容:
ApplicationHolder.application.getServiceClass("package.${property}Service").clazz
Run Code Online (Sandbox Code Playgroud)
但以这种方式加载它不会注入它的依赖服务.我做错了吗?
Bur*_*ith 15
新实例将绕过Spring的依赖管理; 您需要从应用程序上下文中获取配置的单例bean.请改用:
def service = ApplicationHolder.application.getMainContext().getBean("${property}Service")
Run Code Online (Sandbox Code Playgroud)
这假定'property'是服务的部分bean名称,即对于FooBarService,该属性必须是'fooBar'.如果它是'FooBar',那么您可以使用GrailsNameUtils.getPropertyName()来修复它:
import grails.util.GrailsNameUtils
String beanName = GrailsNameUtils.getPropertyName(property) + 'Service'
def service = ApplicationHolder.application.getMainContext().getBean(beanName)
Run Code Online (Sandbox Code Playgroud)