Spring Boot的dao无法注入Autowire的问题
笔者参与的一个项目,需要设计一个logingTicketDAO,然后使用Autowired自动注入,在Test里面生成一个测试时,测试名字为InitDatabaseTests,出现以下问题:
可以看到无法Autowire com.nowcoder.toutiao.dao.LoginTicketDAO,本来以为是Autowire的问题,因为Autowire提示“Could not Autowire.No beans of LoginTicketDAO type found”,然后我在网上找帖子尝试解决Autowire问题,有的说用Autowire(required=false),改了以后还是出现问题:
反而出现了空指针异常,而且在这个InitDatabaseTest中同样注入了UserDAO和NewsDAO,它们虽然也提示了“Could not Autowire.No beans of LoginTicketDAO type found”,但是可以照常使用。可见不是Autowire的问题。再次我再奉上loginTicketDAO:
我找了一个下午和晚上,终于找到了,因为dao使用让mybatis知道,所以按照规范在public interface loginTicketDAO的上一行应该加一个@Mapper,这样才能注入到mybatis里面,我加了以后,问题解决:
启示:要严格注意@Autowired和@Mapper这些注解的规范,在跟着教程做项目时一不留神就是快一天找不到bug的折磨,分享出来,希望可以帮助到别人。