码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2016-08-22 23:43:03      阅读:623      评论:0      收藏:0      [点我收藏+]

标签:shiro循环引用

启动报错: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启动循环引用问题解决思路和方案

标签:shiro循环引用

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!