En primavera, puedo Autowire nuevos granos desde el interior de un bean autowired?

StackOverflow https://stackoverflow.com/questions/2383205

  •  24-09-2019
  •  | 
  •  

Pregunta

cosas que normalmente solo @Autowire en objetos de primavera. Pero he encontrado una situación en la que necesito para crear dinámicamente algunos objetos que requieren valores que podrían ser autowired.

¿Qué hacer? Lo que podría hacer es simplemente pasar manualmente los valores autowired en el constructor de los nuevos objetos. Lo que me gustaría hacer es simplemente Autowire cada nuevo objeto como 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 yo no tendría 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.

¿Fue útil?

Solución

Se puede utilizar AutowireCapableBeanFactory :

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

    private <T> T createAutowiredObject(Class<T> c) {
        return factory.createBean(c);
    }
    ...
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top