que inyeccion hace ejemplo dependencias context bean autowire annotation java spring dependency-injection

java - inyeccion - que es un bean en spring



¿Cómo inyectar dependencias en un objeto autoejeado en Spring? (4)

Digamos que tenemos una clase:

public class MyClass { @Autowired private AnotherBean anotherBean; }

Luego creamos un objeto de esta clase (o algún otro marco ha creado la instancia de esta clase).

MyClass obj = new MyClass();

¿Es posible todavía inyectar las dependencias? Algo como:

applicationContext.injectDependencies(obj);

(Creo que Google Guice tiene algo como esto)


Acabo de obtener la misma necesidad y en mi caso ya era la lógica dentro de la clase java no manejable de Spring la que tenía acceso a ApplicationContext . Inspirado por scaffman. Resuelto por:

AutowireCapableBeanFactory factory = applicationContext.getAutowireCapableBeanFactory(); factory.autowireBean(manuallyCreatedInstance);


No sin algunas soluciones, ya que Spring no sabe nada sobre esta instancia.

La verdadera pregunta es: ¿por qué creas instancias de una clase en la que quieres inyectar dependencias manualmente, en lugar de dejar que Spring la controle? ¿Por qué la clase no usa MyClass para inyectar MyClass ?


Puede hacerlo utilizando el método autowireBean() de AutowireCapableBeanFactory . Le pasas un objeto arbitrario, y Spring lo tratará como algo creado por sí mismo, y aplicará los diversos bits y piezas de autowiring.

Para obtener AutowireCapableBeanFactory , solo autoconexión:

private @Autowired AutowireCapableBeanFactory beanFactory; public void doStuff() { MyBean obj = new MyBean(); beanFactory.autowireBean(obj); // obj will now have its dependencies autowired. }


También puede marcar su MyClass con la anotación @Configurable:

@Configurable public class MyClass { @Autowired private AnotherClass instance }

Luego, en el momento de la creación, inyectará automáticamente sus dependencias. También debe tener <context:spring-configured/> en su contexto de aplicación xml.