zoukankan      html  css  js  c++  java
  • 记一次spring boot项目启动时的依赖循环

    奇怪的是在我Ubuntu的机器上打包到测试服务器上报错,而从另外一台windows机器打包时就没问题,刚开始还以为是maven和jdk的问题。报错的启动时日志如下:

    2019-06-14 14:03:45,644 org.springframework.boot.diagnostics.LoggingFailureAnalysisReporter [main] (LoggingFailureAnalysisReporter.java:38) DEBUG --> Application failed to start due to an exception
    org.springframework.beans.factory.BeanCurrentlyInCreationException: Error creating bean with name 'heliPayChannelAsynService': Bean with name 'heliPayChannelAsynService' has been injected into other beans [heliPayChannelService] in 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 'allowEagerInit' flag turned off, for example.

    Description:

    The dependencies of some of the beans in the application context form a cycle:

    |  operManagerServiceImpl (field private com.ps.ydxjd.core.api.service.order.impl.OrderServiceImpl com.ps.ydxjd.core.api.service.manager.impl.OperManagerServiceImpl.orderServiceImpl)
    ↑     ↓
    |  orderServiceImpl (field private com.ps.ydxjd.core.api.service.pay.IPayService com.ps.ydxjd.core.api.service.order.impl.OrderServiceImpl.payService)
    ↑     ↓
    |  payService (field private com.ps.ydxjd.core.api.service.pay.HeliPayChannelAsynService com.ps.ydxjd.core.api.service.pay.impl.PayServiceImpl.heliPayChannelAsynService)
    ↑     ↓
    |  heliPayChannelAsynService

    查到文章也有类似的经历,

    heliPayChannelAsynService加上了@EnableAsync(proxyTargetClass = true),方法上用了@Async

    https://stackoverflow.com/questions/27400759/spring-3-2-project-fails-to-load-when-enableasync-is-added-to-configuration

    https://stackoverflow.com/questions/28985144/spring-autowired-aop-circular-dependency

    大概的意思是注入方法用了@Async的对象早于AOP创建proxy类,当spring初始化applicationContext后,发现注入的对象并不是proxy类。于是报错

    解决方法是在注入heliPayChannelAsynService的地方加上   @Lazy(value = true)

    喜欢艺术的码农
  • 相关阅读:
    云小课 | 华为云KYON之VPC终端节点
    华为云专家向宇:工欲善其事必先利其器,才能做数据的“管家”
    NB-IoT四大关键特性及实现告诉你,为啥NB
    Base64 原理
    netty系列之:轻轻松松搭个支持中文的服务器
    轻松让你的nginx服务器支持HTTP2协议
    是的你没看错,HTTP3来了
    HTTP协议之:HTTP/1.1和HTTP/2
    netty系列之:在netty中使用protobuf协议
    protocol buffer的高效编码方式
  • 原文地址:https://www.cnblogs.com/zjhgx/p/11047811.html
Copyright © 2011-2022 走看看