2009-11-04 2 views
4

Предположим, что у меня есть BarService под grails-app/services и обычный класс Groovy 'Foo', подобный этому под src/groovy.Grails: инъекция зависимости в обычном классном классе

class Foo { 
    def barService 
} 

Есть ли способ превратить это в весенний боб программно во время выполнения? Чтобы уточнить, я хочу получить ссылку на BarService, введенную в поле barService.

def fooInstance = new Foo() 
magic-create-spring-bean-function(fooInstance) 
assert fooInstance.barService 

ответ

6

См this answer о том, как получить экземпляр ApplicationContext. Электропроводка свойства фасоли можно сделать так:

def ctx = ... 
def foo = new Foo() 
ctx.beanFactory.autowireBeanProperties(foo, ctx.beanFactory.AUTOWIRE_BY_NAME, false) 

Я предложил бы использовать регулярные весенние бобы (возможно прототип в области видимости), а не такой подход, хотя.