6

私は通常、物事を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);
        }
        // ...
    }
}

理想的には、このBeanには構成情報がありません。自動配線されているため、新しいBeanの自動配線を行うために必要なオブジェクトは、で自動配線することで利用できるようになります。

4

1 に答える 1

11

あなたが使用することができますAutowireCapableBeanFactory

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

    private <T> T createAutowiredObject(Class<T> c) {
        return factory.createBean(c);
    }
    ...
}
于 2010-03-04T22:47:36.860 に答える