printemps autocâblés aop dépendance circulaire

Je suis en utilisant java config avec @ComponentScanpour initialiser mes haricots
et @EnableAspectJAutoProxy(proxyTargetClass=true)à utiliser cglib procurations.

Dans ce projet, nous avons un grand nombre de services générés par autocâblés entre eux à l'aide de @Autowired. Il fonctionne assez bien.

Mais, pour certains de ces services, j'ai ajouté @Async (j'ai aussi ajouté @EnableAsync(proxyTargetClass = true)sur mon @Configurationclasse).

Après, je reçois:

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.

Je suppose que c'est parce que le Printemps est de l'injection de service avec @Asyncméthode AVANT de l'AOP crée le proxy.
Ce pourrait être le problème?
Comment devrais-je résoudre ce problème?

Afin d'essayer de clarifier mon problème, disons que j'ai:

@Service A,B & C

Un a autocâblés B & C
B a autocâblés A & C
C a autocâblés A & B

C est une méthode marquée comme @Async.

Quand le Printemps initialiser applicationContext, il tente d'initialiser Un, mais a besoin de B & C, de sorte qu'il initialise. Mais après tout, AOP essaie de faire un proxy de C (car @Asynchrone) et puis il détecte que autocâblés C en B et A n'est pas la même que la procuration de C de manière à ce qu'il échoue.

J'espère que cela peut expliquer un peu plus ce qui se passe.

  • Merci de poster un SSCCE
InformationsquelleAutor ilopezluna | 2015-03-11