wrapped the some raw part its has form eventually context but been beans application spring aop spring-java-config spring-aspects

spring - the - in its raw version as part of a circular reference but has eventually been wrapped



primavera autowired aop dependencia circular (2)

Finalmente, lo @Lazy utilizando @Lazy on services (con métodos anotados con @Async ), y también , donde fueron autoinstalados. De esta manera, supongo que Spring solo inicializa y autowires esos servicios cuando son necesarios en lugar de en la inicialización del contexto de la aplicación.

Estoy usando java config con @ComponentScan para inicializar mis beans y @EnableAspectJAutoProxy(proxyTargetClass=true) para usar proxies cglib.

En este proyecto tenemos una gran cantidad de servicios generados automáticamente entre ellos usando @Autowired . Funciona bastante bien.

Pero, para algunos de estos servicios he agregado @Async (también he agregado @EnableAsync(proxyTargetClass = true) en mi clase @Configuration ).

Después de eso, estoy recibiendo:

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.

Supongo que esto se debe a que Spring está inyectando el servicio con el método @Async ANTES que AOP cree el proxy. Este podría ser el problema? ¿Cómo debo arreglarlo?

Para intentar aclarar mi problema, digamos que tengo:

@Servicio A, B y C

A se ha conectado automáticamente. B & C. Ha sido autorizada. A & C. Ha sido autorizada. A & B.

C tiene un método marcado como @Async.

Cuando Spring inicializa applicationContext, intenta inicializar A, pero necesita B & C, por lo que los inicializa. Pero después de todo, AOP intenta hacer un proxy de C (porque @Async) y luego detecta que C autowired en B y A no es lo mismo que proxy de C, por lo que falla.

Espero que esto pueda explicar un poco más lo que está pasando.


Logré solucionar un problema similar agregando @Qualifier junto con @Autowire, por ejemplo:

@Autowired @Qualifier("publisher") private Publisher publisher;