2010-03-04 14 views
5

Normalmente solo @Autowire cosas en objetos de primavera. Pero me he encontrado con una situación en la que necesito crear dinámicamente algunos objetos que requieren valores que pueden autoconectarse.En primavera, ¿puedo realizar la conexión automática de beans nuevos desde dentro de un bean autowired?

¿Qué debo hacer? Lo que podría hacer es pasar manualmente los valores de autoenlace al constructor de los nuevos objetos. Lo que me gustaría hacer es simplemente autoaumentar cada nuevo objeto a medida que lo creo.

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

Lo ideal sería que no tuviera ninguna información de configuración en este bean. Se autowired, por lo que cualquier objeto que tiene que hacer el autowiring de los nuevos granos deben estar a su disposición por Autowiring en

Respuesta

10

Usted puede utilizar AutowireCapableBeanFactory:.

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

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