IDEA中@Autowired自动注入MyBatis Mapper报红警告的几种解决方法
投稿:zx
今天在使用 IDEA 使用 MyBatis 的时候遇到了这种情况:
可以看到 userMapper 下有个红色的波浪警告,虽然代码没有任何问题,能正常运行,但是这个红色警告在这里杵着确实让人很窝心。
于是我在网上找了找,最终明白了原因所在:
- 因为 IDEA 可以智能的理解上下文,然而
UserMapper
这个接口是 MyBatis 的 IDEA 理解不了。 - 而
@Autowired
注解,默认情况下要求依赖对象(也就是userMapper
)必须存在。而 IDEA 认为这个对象的实例/代理是个 null ,所以就友好地给个提示。
然后最终的解决方案总结了几个,按需使用把:
方法1:为 @Autowired 注解设置 required = false
使用 @Autowired 注解时,若希望允许 null 值,可设置 required = false,像这样:
@Autowired(required = false) private UserMapper userMapper;
这样就不会有警告了。原因很好理解:IDEA 认为 userMapper 是个 null ,给了警告;加上 required = false 后,使用 @Autowired 注解不再去校验 userMapper 是否存在了。也就不会有警告了。
总结:
这种方式有点蛋疼。一个庞大的既有项目,可能到处都在引用 Mapper,总不能到处都补上 required = false
吧……而且对于新手/新员工,很难一眼看懂加 required = false
属性只是为了解决 IDEA 的警告。
方法2:使用 @Resource 替换 @Autowired
像这样:
@Resource private UserMapper userMapper;
这样也不会再有讨厌的警告。如果你对原因感兴趣,不妨了解一下《@Autowired 与@Resource的区别》。
总结:
这种方式挺赞,但如果一个项目已经大量使用 @Autowired ,然后为了个警告到处改成 @Resource ,也有点蛋疼。
方法3:在 Mapper 接口上添加 @Repository 注解
@Repository public interface UserMapper extends Mapper<User> { } 这样能让你的 @Autowired private UserMapper userMapper; 不再报红。
当然,如果你用 @Component 替换 @Repository 也是可以的。原理大致:IDEA 不是认为 userMapper 是个 null 嘛…加个 @Repository 注解骗一下 IDEA 就OK了……
总结:
这种方式比较赞,改动小,也简单,我比较喜欢。
方法4:用 Lombok
@Service @RequiredArgsConstructor(onConstructor = @__(@Autowired)) public class TestService { private final UserMapper userMapper; ... }
方法5:把 IDEA 的警告关掉。
个人没试过,也没有动力去试。没有提示的 IDEA 是没有灵魂的,我从来不去修改 IDEA 的任何警告设置。
方法6:安装 mybatis plugin 即可解决该问题。
到此这篇关于IDEA中@Autowired自动注入MyBatis Mapper报红警告的几种解决方法的文章就介绍到这了,更多相关IDEA @Autowired自动注入报红警告 内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!