Вы можете получить доступ к контексту приложения из любого артефакта Grails, используя
ApplicationContext ctx = grailsApplication.mainContext
Затем вы можете использовать его для получения любых интересующих вас бинов:
IStrategy strat = (IStrategy) ctx.getBean("mystrat")
В классах, которыеу вас нет доступа к grailsApplication
, вы можете использовать помощника, такого как следующий, чтобы получить доступ к контексту приложения и его компонентам
class SpringUtils {
static getBean(String name) {
applicationContext.getBean(name)
}
static <T> T getBean(String name, Class<T> requiredType) {
applicationContext.getBean(name, requiredType)
}
static ApplicationContext getApplicationContext() {
ApplicationHolder.application.mainContext
}
}
Однако это должно быть необходимо, только если вам нужно получить разныереализации одного и того же компонента во время выполнения.Если требуемый компонент известен во время компиляции, просто соедините компоненты вместе в resources.xml
или resources.groovy