我想使用依赖注入在我的Grails应用程序中使用Java编写的服务。在没有注入的情况下用Java创建它看起来像这样:
ServiceFactory.newInstance().getElementService()
我想以与为控制器,服务和作业注入服务相同的方式使用它。
class ImportJob {
def elementService
...
}
我知道这应该进入resources.groovy
,这就是我到目前为止所做的:
serviceFactory(ServiceFactory) { bean ->
bean.factoryMethod = 'newInstance'
}
elementService(ElementService) {
}
我在文档中找到了很少的资源来帮助解决这个问题。如何完成elementService,以便创建如上所述的对象?我应该使用BeanBuilder吗?
答案 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.factoryMethod
和bean.factoryBean
。
serviceFactory(ServiceFactory) { bean ->
bean.factoryMethod = 'newInstance'
bean.scope = 'singleton'
}
elementService(ElementService) { bean ->
bean.factoryMethod = 'getElementService'
bean.factoryBean = 'serviceFactory'
}
这是一个简单的解决方案,特别是如果ServiceFactory是外部的并且无法更改。