Disons que nous avons une classe:
public class MyClass {
@Autowired private AnotherBean anotherBean;
}
Ensuite, nous avons créé un objet de cette classe (ou un autre framework a créé l'instance de cette classe).
MyClass obj = new MyClass();
Est-il possible d'injecter encore les dépendances? Quelque chose comme:
applicationContext.injectDependencies(obj);
(Je pense que Google Guice a quelque chose comme ça)
java
spring
dependency-injection
Igor Mukhin
la source
la source
code
private @Autowired AnotherBean bean; public void doStuff () {MyBean obj = new MyBean (bean); }code
. Semble être comme avec toutes ces annotations, les gens sont vraiment confus et n'utilisent tout simplement pas le modèle de base qui était dans le SDK java depuis le jour 1. :(Vous pouvez également marquer votre MyClass avec l'annotation @Configurable:
Ensuite, au moment de la création, il injectera automatiquement ses dépendances. Vous devriez également avoir
<context:spring-configured/>
dans le contexte de votre application xml.la source
<context:spring-configured/>
?J'ai juste le même besoin et dans mon cas, c'était déjà la logique de la classe java non gérable par Spring qui avait accès à
ApplicationContext
. Inspiré par scaffman. Résolu par:la source
Je voulais partager ma solution qui suit l'
@Configurable
approchebriefly
mentionnée dans la réponse @ glaz666 carMa configuration
Spring Neo4j & Aop starts
(ce qui n'est pas pertinent de toute façon)Spring Boot
est prêt en utilisant l'@Configurable
approche (en utilisantApplicationRunner
)Pas
J'avais besoin de suivre les étapes ci-dessous pour le faire fonctionner
@Configurable(preConstruction = true, autowire = Autowire.BY_TYPE, dependencyCheck = false)
à placer au-dessus de votreBean
qui doit être instancié manuellement. Dans mon cas, celuiBean
qui doit être instancié manuellement a des@Autowired
services, donc les accessoires à l'annotation ci-dessus.XXXApplicaiton.java
(ou le fichier qui est annoté avec@SpringBootApplication
) le@EnableSpringConfigured
et@EnableLoadTimeWeaving(aspectjWeaving=AspectJWeaving.ENABLED)
compile('org.springframework.boot:spring-boot-starter-aop')
etcompile('org.springframework:spring-aspects:5.0.7.RELEASE')
Bean
qui est annoté avec@Configurable
n'importe où et ses dépendances doivent être câblées automatiquement.* En ce qui concerne le point n ° 3 ci-dessus, je suis conscient que le
org.springframework.boot:spring-boot-starter-aop
tire transitivement lespring-aop
(comme indiqué ici mavencentral ) mais, dans mon cas, l'Eclipse n'a pas réussi à résoudre les@EnableSpringConfigured
annotations, d'où la raison pour laquelle j'ai explicitement ajouté laspring-aop
dépendance en plus du démarreur. Si vous rencontrez le même problème, déclarez simplement la dépendance ou partez à l'aventure pour découvrirorg.springframework.context.annotation.aspect.*
n'est pas disponiblela source