问题描述
使用了一段时间的Eclipse做开发,听业界对IDEA的评价蛮高,所以想用IDEA搭建一个框架出来,并做开发,但是这个东西并没有我想象的那么友好,本来一个简易的框架很容易就能够搭建起来的,但是弄了很久都没能完成,主要时间浪费在了填坑的路上,进入正题:使用MyBatis的时候,在ServiceImpl通过SpringMVC注解的形式引入dao接口(@Resource或者@Auterwired),在dao接口(在IDEA里面好像改成了mapper,但实质是一样的)变量上,抛出了如题的异常
网上找了很多的解决方案,收效甚微——有人用忽略告警配置的,我的项目里面并不能成功;还有人推荐用@Autowired(required = false)这种方式的,忽略这个dao的bean创建,我的项目倒是能够启动,但我也不可能每一个dao都配置那么一个注解吧?
相似的解决方案还有很多,但是我想说上述的这些方法都不能真正的从本质上解决问题
原因分析
其实这正是IDEA比Eclipse更优秀的地方,你们真别怪IDEA,它只是比Eclipse的校验更加严格而已,所以才会造成类似的报错,譬如在配置文件里能自封闭的标签,你如果用了标签对的形式,他都要抛出警告。好了,说了那么多,最根本的原因在于我们缺少一个Mybatis Plugin的插件支持。
解决方案
打开IDEA,File–>Settings–>Plugins,搜索Mybatis Plugin,选择如图的插件,别选其他的!
下载完成以后,这个东西并不能直接启用,因为他要收费,既然是做程序的,就要懂得如何去破解,贴上网址:MyBatis Plugin 学习使用
破解完成后,再次启动IDEA,问题就不会再出现了,而且这才是从根本上解决问题的方式。
补充
上述的解决方法已经失效,可以尝试把@Autowired注解换成@Resource注解,这两个注解实现的功能是一样的,只是来源于不同的包而已:
- @Autowired来源于Spring的包,
- @Resource来源于java自带的包.
最后,大家有什么不懂的或者其他需要交流的内容,也可以进入我的QQ讨论群一起讨论:654331206