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 inyectar todavía las dependencias? Algo como:
applicationContext.injectDependencies(obj);
(Creo que Google Guice tiene algo como esto)
java
spring
dependency-injection
Igor Mukhin
fuente
fuente
code
privado @Autowired AnotherBean bean; public void doStuff () {MyBean obj = new MyBean (bean); }code
. Parece ser como con todas estas anotaciones, la gente se confunde mucho y simplemente no usa el patrón básico que estaba en Java SDK desde el día 1. :(También puede marcar su MyClass con la anotación @Configurable:
Luego, en el momento de la creación, inyectará automáticamente sus dependencias. También debe tener
<context:spring-configured/>
en su aplicación el contexto xml.fuente
<context:spring-configured/>
?Acabo de tener la misma necesidad y en mi caso ya era la lógica dentro de la clase Java no manejable de Spring a la que tenía acceso
ApplicationContext
. Inspirado en scaffman. Resuelto por:fuente
Quería compartir mi solución que sigue el
@Configurable
enfoque como sebriefly
menciona en la respuesta @ glaz666 porqueMi configuración
Spring Neo4j & Aop starts
(que de todos modos es irrelevante)Spring Boot
esté listo usando el@Configurable
enfoque (usandoApplicationRunner
)Pasos
Necesitaba seguir los pasos a continuación para que funcione
@Configurable(preConstruction = true, autowire = Autowire.BY_TYPE, dependencyCheck = false)
que se colocará encima de ustedBean
se instanciará manualmente. En mi caso, laBean
instancia que se va a crear manualmente tiene@Autowired
servicios, por lo tanto, los accesorios de la anotación anterior.XXXApplicaiton.java
archivo principal de Spring Boot (o el archivo que está anotado@SpringBootApplication
) con el@EnableSpringConfigured
y@EnableLoadTimeWeaving(aspectjWeaving=AspectJWeaving.ENABLED)
compile('org.springframework.boot:spring-boot-starter-aop')
ycompile('org.springframework:spring-aspects:5.0.7.RELEASE')
Bean
que está anotado en@Configurable
cualquier lugar y sus dependencias deben conectarse automáticamente.* En lo que respecta al punto n. ° 3 anterior, soy consciente de que el tirón de forma
org.springframework.boot:spring-boot-starter-aop
transitivaspring-aop
(como se muestra aquí principalmente ) pero, en mi caso, el Eclipse no pudo resolver las@EnableSpringConfigured
anotaciones, por lo tanto, por qué agregué explícitamente laspring-aop
dependencia además del iniciador. Si enfrenta el mismo problema, simplemente declare la dependencia o emprenda la aventura de descubrirorg.springframework.context.annotation.aspect.*
no está disponiblefuente