В Spring я могу автосоединить новые бобы проводом из автопроводного боба?

Я обычно просто @Autowire вещи в пружинные объекты. Но я встретился с ситуацией, где я должен динамично создать некоторые объекты, которые требуют значений, которые могли быть автосоединены проводом.

Что мне делать? То, что я мог сделать, просто вручную передать автопроводные значения в конструктора новых объектов. То, что я хотел бы сделать, просто автосоединить каждый новый объект проводом, поскольку я создаю его.

@Service
public class Foo {
    @Autowired private Bar bar;

    /** This creates Blah objects and passes in the autowired value. */
    public void manuallyPassValues() {
        List<Blah> blahs = new LinkedList<Blah>();
        for(int i=0; i<5; ++i) {
            Blah blah = new Blah(bar);
            blahs.add(blah);
        }
        // ...
    }

    /** This creates Blah objects and autowires them. */
    public void useAutowire() {
        List<Blah> blahs = new LinkedList<Blah>();
        for(int i=0; i<5; ++i) {
            // How do I implement the createAutowiredObject method?
            Blah blah = createAutowiredObject(Blah.class);
            blahs.add(blah);
        }
        // ...
    }
}

Идеально у меня не было бы конфигурационной информации в этом бобе. Это автосоединено проводом, таким образом, любые объекты, это должно сделать автопроводное соединение новых бобов, должны быть доступны ему путем автопроводного соединения их в.

6
задан HappyEngineer 4 March 2010 в 22:29
поделиться

1 ответ

Вы можете использовать AutowireCapableBeanFactory :

@Service 
public class Foo { 
    @Autowired private AutowireCapableBeanFactory factory; 

    private <T> T createAutowiredObject(Class<T> c) {
        return factory.createBean(c);
    }
    ...
}
11
ответ дан 9 December 2019 в 22:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: