V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
guyeuro
V2EX  ›  问与答

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

  •  
  •   guyeuro · 2017-09-14 11:52:56 +08:00 · 2606 次点击
    这是一个创建于 2619 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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 条回复    2017-09-14 15:56:38 +08:00
    vankid
        1
    vankid  
       2017-09-14 15:40:34 +08:00
    你要问为什么呢,那就是监听先初始化。它出生你的 mapper 还在排队,咋用。
    azygote
        2
    azygote  
       2017-09-14 15:56:38 +08:00
    initColorListener 初始化的时候 colorMapper 还没有被初始化,自然没办法加载。可以使用在 @Component 上加 @DependsOn 或者使用 @Order 指定加载顺序。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3026 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 10:53 · PVG 18:53 · LAX 02:53 · JFK 05:53
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.