6 Stimmen

Kann ich in Spring neue Beans aus einer autowired Bean heraus autowire?

Normalerweise verbinde ich die Dinge einfach mit @Autowire zu Federobjekten. Aber ich bin auf eine Situation gestoßen, in der ich einige Objekte dynamisch erstellen muss, die Werte erfordern, die automatisch verdrahtet werden können.

Was sollte ich tun? Was ich tun könnte, ist nur manuell übergeben die autowired Werte in den Konstruktor der neuen Objekte. Was ich tun möchte, ist nur autowire jedes neue Objekt, wie ich es erstellen.

@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);
        }
        // ...
    }
}

Idealerweise würde ich keine Konfigurationsinformationen in dieser Bean haben. Es ist autowired, so dass alle Objekte, die es braucht, um die autowiring der neuen Beans zu tun, sollte es durch autowiring sie in zur Verfügung stehen.

11voto

axtavt Punkte 233070

Sie können verwenden AutowireCapableBeanFactory :

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

    private <T> T createAutowiredObject(Class<T> c) {
        return factory.createBean(c);
    }
    ...
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X