Grails从工厂创建服务

时间:2015-04-17 16:18:33

标签: grails spring-bean

我想使用依赖注入在我的Grails应用程序中使用Java编写的服务。在没有注入的情况下用Java创建它看起来像这样:

ServiceFactory.newInstance().getElementService()

我想以与为控制器,服务和作业注入服务相同的方式使用它。

class ImportJob {
    def elementService
    ...
}

我知道这应该进入resources.groovy,这就是我到目前为止所做的:

serviceFactory(ServiceFactory) { bean ->
    bean.factoryMethod = 'newInstance'
}

elementService(ElementService) {

}

我在文档中找到了很少的资源来帮助解决这个问题。如何完成elementService,以便创建如上所述的对象?我应该使用BeanBuilder吗?

2 个答案:

答案 0 :(得分:4)

您可以为此创建FactoryBean,因为它不像在类中调用方法那样直接:

package com.mycompany

import org.springframework.beans.factory.FactoryBean
import org.springframework.beans.factory.InitializingBean

class ElementServiceFactoryBean implements FactoryBean<ElementService>, InitializingBean {

   private ElementService elementService

   ElementService getObject() { elementService }

   Class<ElementService> getObjectType() { ElementService }

   boolean isSingleton() { true }

   void afterPropertiesSet() {
      elementService = ServiceFactory.newInstance().elementService
   }
}

您将resources.groovy注册为

elementService(ElementServiceFactoryBean)

答案 1 :(得分:1)

在elementService bean中使用bean.factoryMethodbean.factoryBean

serviceFactory(ServiceFactory) { bean ->
    bean.factoryMethod = 'newInstance'
    bean.scope = 'singleton'
}

elementService(ElementService) { bean ->
    bean.factoryMethod = 'getElementService'
    bean.factoryBean = 'serviceFactory'
}

这是一个简单的解决方案,特别是如果ServiceFactory是外部的并且无法更改。

相关问题