首页 > 编程语言 > 详细

shiro+spring boot+mybatis启动循环引用问题解决思路和方案

时间:2016-08-22 23:40:47      阅读:5636      评论:0      收藏:0      [点我收藏+]

启动报错:Error creating bean with name ‘dataSource‘: Requested bean is currently in creation: Is there an unresolvable circular reference?

翻译过来的意思就是:创建bean“dataSource”报错:需要的bean正在被创建:是否有一个没解决的循环依赖?

更通俗点的解释就是:因为循环依赖的问题导致“dataSource”这个bean无法被创建。

那么我们首先想到的是“到底是哪里出现了循环依赖?

最直接的方式是看启动日志。

从上往下读异常信息是:创建myshiroRealm失败——因为需要的类userServerImp创建失败——因为userDao创建失败——因为userMapper创建失败——因为SQLSessionFactory创建失败——因为dataSource创建失败——因为mydateSource失败——因为datasourceInitializer创建失败——因为dataSource创建失败——因为dataSource正在被创建——因为循环依赖。

那么问题就很明显了:创建dataSource的时候需要先创建dataSource!!!

这时我们会有第二个问题“为什么在引入了shiro之后会出现这个问题?

回到上面的过程,我们知道在在初始化myshiroRealm的时候需要用到数据库(基于其它方式访问数据的realm,不在讨论范围),于是不可避免的用到dataSource。如果在初始化shiroRealm的时候容器没有dataSource,容器就会为我们创建一个,于是就有了我们看到的循环依赖的问题。

那么我们会想“如果在初始化shiroRealm的时候,容器已经有了dataSource,就不会有循环依赖的问题

这时就有了第三个问题“如何在初始化shiroRealm之前,让容器已经拥有dataSource?

我的方法是让shiroRealm初始化的时候某个类变成“懒加载”。如下:

@Resource(name="userServerImp")

@Lazy 

UserServer userServer;



本文出自 “11878300” 博客,请务必保留此出处http://11888300.blog.51cto.com/11878300/1841213

shiro+spring boot+mybatis启动循环引用问题解决思路和方案

原文:http://11888300.blog.51cto.com/11878300/1841213

(0)
(1)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!