解决注入mapper报红的问题
程序员文章站
2022-04-26 10:45:51
...
在spring系列集成mybatis时,我们经常遇到这样的问题:
明明注入没有问题,但是intellij idea会报红。
这是因为我们没有手动在代码里把mapper接口注入spring容器中,而@Autowired
注入方式默认要求注入的对象必须是在spring容器中存在的。
所以idea认为这里的userMapper不存在,而用户(我们)选择注入,是一种错误操作,就报红。
那么怎么解决这个问题呢?
以下提供几种相对比较优雅的方式:(越靠前的笔者越推荐,不过纯属个人建议)
Solution 1
使用@Resource
来替代@Autowired
。@Resource
和@Autowired
有什么区别?传送门:(之后补上)
Solution 2
可以在Mapper接口上增加@Repository
注解(或者@Component
注解也可)
这是一种非常直接的解决方案。之前不是说idea认为spring容器里没有mapper对象才报错吗?那就直接点,我们往容器里注入它不就得了。
@Repository
,@Service
,@Controller
,@RestController
,@Component
之间有什么联系和区别?传送门:(之后补上)
Solution 3
使用lombok的@RequiredArgsConstructor
注解
例如以下代码:
@Service
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class MyService {
private final UserMapper userMapper;
...
}
经lombok加强后,代码会变为:
@Service
public class TestService {
private final UserMapper userMapper;
@Autowired
public MyService(final UserMapper userMapper) {
this.userMapper = userMapper;
}
...
}
这种方法有个致命问题。因为在这里lombok把注入方式改为了构造方法注入,一旦出现循环依赖,项目就启动不起来了。
什么叫循环依赖?为什么构造方法注入的循环依赖无法解决?传送门:(之后补上)
上一篇: springcloud-feign
推荐阅读
-
PHP开发中常见的安全问题详解和解决方法(如Sql注入、CSRF、Xss、CC等)
-
解决 IDEA 下 struts.xml 中 extends="struts-default" 报红的问题
-
Win10系统更新14393出现网络图标有红叉无法联网问题的两种解决方法图文教程
-
vue框架下部署上线后刷新报404问题的解决方案(推荐)
-
PHP开发中常见的安全问题详解和解决方法(如Sql注入、CSRF、Xss、CC等)
-
解决 tomcat启动 访问页面 报java.lang.NoSuchMethodError javax.el.ExpressionFactory.newInstance()的问题
-
解决IDEA中Maven依赖包导入失败报红问题(总结最有效8种解决方案)
-
引入mybatis-plus报 Invalid bound statement错误问题的解决方法
-
java 解决实体类序列化时,报failed to lazily initialize 的问题
-
消息队列监听器无法注入bean的问题解决