guyeuro
V2EX  ›  问与答

SpringBoot: 为何 ApplicationListerner 的实现不能注入 mybatis 的 mapper bean

  •  
  •   guyeuro · Sep 14, 2017 · 3237 views
    This topic created in 3165 days ago, the information mentioned may be changed or developed.

    web 项目是 springboot+mybatis 里面有一个 listener 文件和 mapper 文件如下

    listener 文件:

    @Component
    public class InitColorListener implements ApplicationListener {
    
      @Resource(name="colorMapper")
      private ColorMapper mapper;
      ...
    }
    

    mapper 文件

    @Repository("colorMapper")
    public interface ColorMapper {
        List<Color> findAll();
        ...
    }
    

    项目编译启动,出现错误:

    2017-09-14 11:42:40.298 WARN 3560 --- [ main] o.s.boot.SpringApplication : Error handling failed (Error creating bean with name 'InitColorListener': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'colorMapper' available) 2017-09-14 11:42:40.388 ERROR 3560 --- [ main] o.s.b.d.LoggingFailureAnalysisReporter : Disconnected from the target VM, address: '127.0.0.1:50302', transport: 'socket' A component required a bean named 'colorMapper' that could not be found.

    2 replies    2017-09-14 15:56:38 +08:00
    vankid
        1
    vankid  
       Sep 14, 2017
    你要问为什么呢,那就是监听先初始化。它出生你的 mapper 还在排队,咋用。
    azygote
        2
    azygote  
       Sep 14, 2017
    initColorListener 初始化的时候 colorMapper 还没有被初始化,自然没办法加载。可以使用在 @Component 上加 @DependsOn 或者使用 @Order 指定加载顺序。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2897 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 40ms · UTC 15:00 · PVG 23:00 · LAX 08:00 · JFK 11:00
    ♥ Do have faith in what you're doing.