bean 不加id 导致被创建多个

原创
2016/07/13 15:08
阅读数 376

最近在项目中使用spring session时,碰到一个问题,在tomcat7可以正常运行,但是在8不能运行。报如下错误:

 org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type [org.springframework.data.redis.connection.RedisConnectionFactory] is defined: expected single matching bean but found 3: org.springframework.data.redis.connection.jedis.JedisConnectionFactory#0,org.springframework.data.redis.connection.jedis.JedisConnectionFactory#1,org.springframework.data.redis.connection.jedis.JedisConnectionFactory#2

因为spring-session 1.2 依赖了spring 4.2.5 (项目中使用的是3.2.2),一开始以为是版本的问题,升级后问题照旧。 spring session的配置是按照官方文档写的:

<bean class="org.springframework.session.data.redis.config.annotation.web.http.RedisHttpSessionConfiguration"/>
<bean class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"/>

项目的配置文件是分多个的,然后import这个。开始怀疑是不是因为有多个配置文件的原因,就重新建了一个项目,只使用spring session,同样如下配置session(不过只有一个配置文件)。结果可以运行成功。但是不可能把所有的配置都写在一起。
想了一下,什么情况下spring 会创建多个同样类型的bean,照理说只会创建一个才对。最后在查看spring redis的文档时,发现文档中的配置加了一个 ==id== ,然后果断把两个bean都加上了id, 最后运行成功了。
造成这种错误的原因有可能是spring 在初始化bean 的时候还没有初始化完,其他的bean 依赖这个bean的时候,发现没有,然后告诉spring 我需要这个bean,spring 就又初始化这个bean一次,最后就会出现多个同种类型的bean。但是加上id后同种类型的bean id 不会重复,不会重复初始化。(仅猜想)

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部