springboot整合mybatis时@Mapper报错 idea

@Autowired(required=false):表示忽略当前要注入的bean,如果有直接注入,没有跳过,不会报错。

当使用@Autowired注解的时候,其实默认就是@Autowired(required=true),表示注入的时候,该bean必须存在,否则就会注入失败。

注解默认:

原因:https://blog.csdn.net/static_coder/article/details/79580981

在容器的启动过程中,会初始化很多bean,这也是spring的核心之一(IOC)。但是在注入的过程中,扫描到公共方法中要注入的bean,并未找到,强行注入就会注入失败。我们又不能单独的去除改方法,所以我们采取的思想就是有bean就注入,没有就不注入。解决办法就是@Autowired(required=false)。
 

容器的启动顺序。

  1. 先加载父容器(spring),后加载子容器(springmvc)。所以在Controller里面注入service时,父容器中的bean已经初始化完毕,所以正常注入。
  2. 在父子容器中,父容器元素对子容器可见,子容器对父容器的元素不可见。所以父容器中不能获取子容器的元素,但是子容器可以获取父容器的元素。
  3. 当前容器均可获取当前容器中的元素,也就是说在service中可以注入其他service。
  4. 但是,当前容器不可以注入自己。这样就会不停的注入自己,陷入死循环。从而找不到要注入的bean。

你可能感兴趣的:(Java)