2010-03-04 4 views
5

Normalerweise mache ich nur Dinge in Feder-Objekte. Aber ich habe eine Situation gefunden, wo ich dynamisch einige Objekte erstellen muss, die Werte benötigen, die autowired werden könnten.Kann ich im Frühjahr neue Bohnen aus einer selbstverfrachteten Bohne heraus autowire?

Was soll ich tun? Was ich tun könnte, ist nur manuell übergeben die Werte für die Autowired in den Konstruktor der neuen Objekte. Was ich tun möchte, ist, jedes neue Objekt automatisch zu erstellen, während ich es erstelle.

@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 hätte ich in dieser Bean keine Konfigurationsinformationen. Es ist autowired, so dass alle Objekte braucht es die autowiring der neuen Bohnen tun sollte autowiring sie in ihm vorhanden sein

Antwort

10

Sie AutowireCapableBeanFactory verwenden können.

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

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