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

2017-09-14 11:52:56 +08:00
 guyeuro

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.

2636 次点击
所在节点    问与答
2 条回复
vankid
2017-09-14 15:40:34 +08:00
你要问为什么呢,那就是监听先初始化。它出生你的 mapper 还在排队,咋用。
azygote
2017-09-14 15:56:38 +08:00
initColorListener 初始化的时候 colorMapper 还没有被初始化,自然没办法加载。可以使用在 @Component 上加 @DependsOn 或者使用 @Order 指定加载顺序。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/390617

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX