Ответ 1
ctx."${beanName}"
добавляется к метаклассу ApplicationContext
, поэтому вы можете делать такие вещи, как def userService = ctx.userService
. Это просто ярлык для ctx.getBean('userService')
, чтобы вы могли изменить свой код на
return ctx.getBean(beanName)
и это будет одно и то же, но менее волшебное.
Поскольку вы вызываете это из контроллера или службы, я пропускаю материал ServletContextHolder
и получаю контекст из-за зависимости, вставляя grailsApplication
bean (def grailsApplication
) и получая его через def ctx = grailsApplication.mainContext
. Затем передайте его в этот вспомогательный класс (помните, что большая парадигма Spring - это инъекция зависимостей, а не старая школьная зависимость), и тогда это будет просто
class Resolver {
def getBean(ctx, String beanName) {
ctx.getBean(beanName)
}
}
Но тогда это так просто, что я бы не стал беспокоиться о вспомогательном классе:)