基于属性文件连接bean

时间:2012-03-22 21:17:34

标签: grails groovy

我读过各种帖子,例如:

link1 link2

但他们都没有为我工作。

这是我当前(已损坏的)resources.groovy文件:

beans = {

    def instance = Class.forName(grailsApplication.config.foo.bar)
    exampleService(instance)
}

属性文件中foo.bar的值是类的名称(实现ExampleService)。

可以吗?

1 个答案:

答案 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')
}