标签: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