spring boot在启动时,会根据启动类(一般为application)的路径,将启动类及其以下路径的包扫描一遍,将添加了@Component、@Repository、@Service、@Controller注解的实现类生成添加进spring容器中。然而在spring boot整合mybatis框架时,如果不添加mapper相关的注解,spring是无法在容器中生成实现类的
如在图中mapper,虽然添加了@Repository,且保证了该mapper在启动类的路径下,仍然无法在容器中找到实现类(故无法注入使用,因为他只是个接口,没有具体的实现类)。
一般情况下,@Controller本身注解在类中,故可以直接加入容器。@Service虽然是个接口,但一般情况下实现类我们都自己实现了,故@Service的接口实现也能被加入spring容器。而在@Repository注解的mapper中,我们没有实现这个接口,故容器没有将其添加。
所以一般情况下,需要我们在该mapper中添加注解@Mapper或者在启动类中加入mapper的相关扫描才可将mapper加入容器中。(因为看不懂,也不会看源码,故而只能靠查资料。)
加了上述注解之后,mabatis会在该目录下,找到mapper接口(看不懂源码,资料也未找到,不知这里的扫描会不会将包下的所有类或接口都扫到呢?),再解析xml,生成mapper接口对应的实现类,最终再由spring将其实现类加入容器中,方可通过注解实现这些mapper