Powiedzmy, że mamy klasę:
public class MyClass {
@Autowired private AnotherBean anotherBean;
}
Następnie stworzyliśmy obiekt tej klasy (lub inny framework stworzył instancję tej klasy).
MyClass obj = new MyClass();
Czy nadal można wstrzykiwać zależności? Coś jak:
applicationContext.injectDependencies(obj);
(Myślę, że Google Guice ma coś takiego)
java
spring
dependency-injection
Igor Mukhin
źródło
źródło
code
private @Autowired AnotherBean bean; public void doStuff () {MyBean obj = new MyBean (bean); }code
. Wygląda na to, że z tymi wszystkimi adnotacjami ludzie są naprawdę zdezorientowani i po prostu nie używają podstawowego wzorca, który był w pakiecie java SDK od pierwszego dnia :(Możesz również oznaczyć swoją MyClass adnotacją @Configurable:
Następnie w czasie tworzenia automatycznie wstrzyknie swoje zależności. Powinieneś także mieć
<context:spring-configured/>
w kontekście swojej aplikacji xml.źródło
<context:spring-configured/>
?Właśnie dostałem tę samą potrzebę iw moim przypadku była to już logika wewnątrz nieobsługiwanej przez Spring klasy javy, do której miał dostęp
ApplicationContext
. Zainspirowany scaffmanem. Rozwiązane przez:źródło
Chciałem udostępnić moje rozwiązanie, które jest zgodne z
@Configurable
podejściembriefly
wspomnianym w odpowiedzi @ glaz666, ponieważMoja konfiguracja
Spring Neo4j & Aop starts
(co i tak nie ma znaczenia)Spring Boot
jest gotowa, używając@Configurable
podejścia (używającApplicationRunner
)Kroki
Musiałem wykonać poniższe kroki, aby to działało
@Configurable(preConstruction = true, autowire = Autowire.BY_TYPE, dependencyCheck = false)
umieszczenia na wierzchu,Bean
który ma zostać utworzony ręcznie. W moim przypadkuBean
instancja, która ma być ręcznie@Autowired
utworzona, ma usługi, stąd rekwizyty do powyższej adnotacji.XXXApplicaiton.java
pliku głównego Spring Boot (lub pliku z adnotacją@SpringBootApplication
) z@EnableSpringConfigured
i@EnableLoadTimeWeaving(aspectjWeaving=AspectJWeaving.ENABLED)
compile('org.springframework.boot:spring-boot-starter-aop')
icompile('org.springframework:spring-aspects:5.0.7.RELEASE')
Bean
które jest opatrzone adnotacją w@Configurable
dowolnym miejscu, a jego zależności powinny być automatycznie przypisane.* W odniesieniu do punktu # 3 powyżej, zdaję sobie sprawę, że
org.springframework.boot:spring-boot-starter-aop
przejściowo wyciągaspring-aop
(jak pokazano tutaj mavencentral ), ale w moim przypadku Eclipse nie rozwiązało@EnableSpringConfigured
adnotacji, dlatego też wyraźnie dodałemspring-aop
zależność oprócz startera. Jeśli napotkasz ten sam problem, po prostu zadeklaruj zależność lub udaj się na przygodę z rozwiązywaniem problemóworg.springframework.context.annotation.aspect.*
nie jest dostępnyźródło