我读过各种帖子,例如:
但他们都没有为我工作。
这是我当前(已损坏的)resources.groovy
文件:
beans = {
def instance = Class.forName(grailsApplication.config.foo.bar)
exampleService(instance)
}
属性文件中foo.bar
的值是类的名称(实现ExampleService
)。
可以吗?
答案 0 :(得分:0)
在之前的项目中,我们根据环境变量为bean使用了不同的类。我们从服务接口开始,根据命名约定找到我们想要使用的实现类,如下面的代码片段所示。
与代码的唯一区别是我们使用服务接口的类加载器来检索实现类。另一种选择是grailsApplication.config.foo.bar不包含正确的值。
在grails-app / conf / spring目录中,我们的beans文件包含以下代码来加载正确的实现类:
beans = {
addressService(getImplementation(AddressService))
appointmentService(getImplementation(AppointmentService))
}
def getImplementation(Class service) {
if (CH.config.mockAllServices == 'true' || CH.config."mock${service.simpleName}" == 'true') {
return service.classLoader.loadClass(service.name + 'Mock')
}
return service.classLoader.loadClass(service.name + 'Impl')
}