今天在照着别人项目敲代码的时候,遇见一个问题,那就是我感觉自己都是照着别人敲的代码,但是最后在运行的时候,无论在地址栏输入什么url,跳转的都是error的报错页面,仔细查看控制台也没有报错信息。我还不信这个邪了,就换成了最简单的helloworld返回字符串界面,但是很遗憾,依然跳转到error界面。
控制台打印如下,好像没有报错啊:
半天之后我决定debug调试,发现并不能进入debug是什么鬼,所以断定应该是程序的问题了,仔细查看控制台,突然发现了什么:
只是这一个警告,藏的太隐蔽,说我找不到mapper,不可能啊,明明配置了,再仔细一看,我把扫描mapper的注解@MapperScan写成了扫描组件的注解@ComponentScan,这两者的区别我后面再说。再仔细检查一下,service的实现类忘记加@Service注解,所以进不到扫描。改正之后,一切就很ojbk了,诶粗心的成本是真的大!!!
好了,言归正传,来讲讲@MapperScan和@ComponentScan二者的区别:
@MapperScan:
指定要变成实现类的接口所在的包,然后包下面的所有接口在编译之后都会生成相应的实现类。
@ComponentScan:
会自动扫描包路径下面的所有@Controller、@Service、@Repository、@Component 的类,并把符合扫描规则的类装配到spring容器中。
在我这个例子中,我如果用的是@MapperScan,因为我没写service,控制台会直接报错找不到,而@ComponentScan则不一样了,它不只是扫描mapper,他把符合扫描规则的类装配到spring容器中,所以在控制台里面只是一个小小的warn提示,像我们这种菜鸡平日里写项目只看得懂报错信息的~~~
今天摔的跤就是为了明天的不摔跤,加油!!!