Grails 从工厂创建服务
Grails create a service from a factory
我想在我的 Grails 应用程序中使用 Java 中使用依赖注入编写的服务。在 Java 中创建它而不注入它看起来像这样:
ServiceFactory.newInstance().getElementService()
我想以与为控制器、服务和作业注入服务相同的方式使用它。
class ImportJob {
def elementService
...
}
我知道这应该进入 resources.groovy
,这是我目前所拥有的:
serviceFactory(ServiceFactory) { bean ->
bean.factoryMethod = 'newInstance'
}
elementService(ElementService) {
}
我在文档中发现很少有资源可以帮助解决这个问题。我如何完成 elementService 以便它创建如上所述的对象?我应该使用 BeanBuilder 吗?
您可以为此创建一个 FactoryBean
,因为它不像在 class 中调用方法那样直接:
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)
在 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 是外部的且无法更改时。
我想在我的 Grails 应用程序中使用 Java 中使用依赖注入编写的服务。在 Java 中创建它而不注入它看起来像这样:
ServiceFactory.newInstance().getElementService()
我想以与为控制器、服务和作业注入服务相同的方式使用它。
class ImportJob {
def elementService
...
}
我知道这应该进入 resources.groovy
,这是我目前所拥有的:
serviceFactory(ServiceFactory) { bean ->
bean.factoryMethod = 'newInstance'
}
elementService(ElementService) {
}
我在文档中发现很少有资源可以帮助解决这个问题。我如何完成 elementService 以便它创建如上所述的对象?我应该使用 BeanBuilder 吗?
您可以为此创建一个 FactoryBean
,因为它不像在 class 中调用方法那样直接:
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)
在 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 是外部的且无法更改时。