Frühjahr autowired aop zirkuläre Abhängigkeit

Ich bin mit java-config mit @ComponentScanum zu initialisieren, meine Bohnen
und @EnableAspectJAutoProxy(proxyTargetClass=true)zu verwenden cglib-proxies.

In diesem Projekt haben wir eine Menge von generierten Dienste autowired, zwischen denen Sie mit @Autowired. Es funktioniert ziemlich gut.

Aber, für einige dieser Dienste, die ich Hinzugefügt habe @Async (außerdem habe ich @EnableAsync(proxyTargetClass = true)auf meine @ConfigurationKlasse).

Danach bin ich immer:

Caused by: org.springframework.beans.factory.BeanCurrentlyInCreationException: Error creating bean with name 'ConversationUserLocalService': Bean with name 'ConversationUserLocalService' has been injected into other beans [ConversationUserHistoryLocalService] i
n its raw version as part of a circular reference, but has eventually been wrapped. This means that said other beans do not use the final version of the bean. This is often the result of over-eager type matching - consider using 'getBeanNamesOfType' with the 'a
llowEagerInit' flag turned off, for example.

Ich denke, dies ist so, weil Frühling ist, die Injektion der service mit @AsyncMethode VOR AOP erstellt der proxy.
Dies könnte das problem sein?
Wie soll ich es beheben?

Um zu versuchen zu klären, mein problem, lassen Sie uns sagen, ich habe:

@Service A,B & C

Einen hat autowired B & C
B hat autowired A & C
C hat autowired A & B

C hat eine Methode gekennzeichnet ist, wie @Async.

Wenn der Frühling Datei ApplicationContext initialisieren, es versucht zu initialisieren, muss aber B & C, so initialisiert Sie. Aber nach allem, AOP versucht, eine proxy von C (da @Async), und er dann erkennt, dass autowired C in B und A ist nicht das gleiche wie proxy von C, so schlägt es fehl.

Ich hoffe das kann ein wenig mehr erklären, was passiert ist.

Bitte poste ein SSCCE

InformationsquelleAutor ilopezluna | 2015-03-11

Schreibe einen Kommentar