В предыдущем проекте мы использовали разные классы для bean-компонентов в зависимости от переменной окружения. Там мы начнем с интерфейса службы, чтобы найти класс реализации, который мы хотим использовать, основываясь на соглашении об именах, как показано в фрагменте кода ниже.
Единственная разница с вашим кодом в том, что мы используем загрузчик классов интерфейса службы для получения класса реализации. Другой вариант, конечно, что grailsApplication.config.foo.bar не содержит правильное значение.
В каталоге grails-app / conf / spring наш bean-файл содержал следующий код для загрузки правильного класса реализации:
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')
}