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

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.

阅读 7k
4 个回答

你可以不用这种方式来注入mapper接口,你可以通过扫包加mybatis.xml来进行sql语句查询实现,这种不方便,可以参考下下面这个
Spring Boot 集成MyBatis

配置文件呢,是可以用注解,但你的配置文件是怎么写的呢

可以自己写一个util,继承ApplicationContextAware接口,从spring容器中拿到那个bean。你可以百度springBeanUtil试试,网上有很多。

推荐问题
宣传栏