Nehmen wir an, wir haben eine Klasse:
public class MyClass {
@Autowired private AnotherBean anotherBean;
}
Dann haben wir ein Objekt dieser Klasse erstellt (oder ein anderes Framework hat die Instanz dieser Klasse erstellt).
MyClass obj = new MyClass();
Ist es möglich, die Abhängigkeiten noch zu injizieren? Etwas wie:
applicationContext.injectDependencies(obj);
(Ich denke, Google Guice hat so etwas)
java
spring
dependency-injection
Igor Mukhin
quelle
quelle
code
private @Autowired AnotherBean Bean; public void doStuff () {MyBean obj = neue MyBean (Bean); }code
. Scheint wie bei all diesen Anmerkungen zu sein, die Leute sind wirklich verwirrt und verwenden einfach nicht das Grundmuster, das seit Tag 1 im Java SDK war. :(Sie können Ihre MyClass auch mit der Anmerkung @Configurable markieren:
Zum Zeitpunkt der Erstellung werden dann automatisch die Abhängigkeiten eingefügt. Sie sollten auch
<context:spring-configured/>
in Ihrem Anwendungskontext XML haben.quelle
<context:spring-configured/>
?Ich habe gerade das gleiche Bedürfnis bekommen und in meinem Fall war es bereits die Logik innerhalb der nicht Spring verwaltbaren Java-Klasse, auf die Zugriff hatte
ApplicationContext
. Inspiriert von Scaffman. Gelöst von:quelle
Ich wollte meine Lösung teilen, die dem
@Configurable
Ansatz folgt, wiebriefly
in @ glaz666 Antwort erwähnt, weilMein Setup
Spring Neo4j & Aop starts
(was sowieso irrelevant ist)Spring Boot
mit dem@Configurable
Ansatz (usingApplicationRunner
) fertig ist.Schritte
Ich musste die folgenden Schritte ausführen, damit es funktioniert
@Configurable(preConstruction = true, autowire = Autowire.BY_TYPE, dependencyCheck = false)
auf Ihre zu platzierendeBean
, die manuell instanziiert werden soll. In meinem Fall haben dieBean
zu instanziierenden, zu instanziierenden@Autowired
Dienste daher die Requisiten zur obigen Anmerkung.XXXApplicaiton.java
(oder die mit Anmerkungen versehene Datei@SpringBootApplication
) mit@EnableSpringConfigured
und@EnableLoadTimeWeaving(aspectjWeaving=AspectJWeaving.ENABLED)
compile('org.springframework.boot:spring-boot-starter-aop')
undcompile('org.springframework:spring-aspects:5.0.7.RELEASE')
Bean
, das mit@Configurable
irgendwo kommentiert ist und dessen Abhängigkeiten automatisch verdrahtet werden sollten.* In Bezug auf Punkt 3 oben ist mir bewusst, dass das
org.springframework.boot:spring-boot-starter-aop
transitiv dasspring-aop
(wie hier gezeigt mavencentral ) zieht, aber in meinem Fall konnte die Eclipse die@EnableSpringConfigured
Annotationen nicht auflösen , weshalb ich diespring-aop
Abhängigkeit zusätzlich zum Starter explizit hinzugefügt habe . Wenn Sie mit dem gleichen Problem konfrontiert sind, erklären Sie einfach die Abhängigkeit oder machen Sie sich auf den Weg, es herauszufindenorg.springframework.context.annotation.aspect.*
ist das nicht verfügbarquelle