Spring緩存池組件衝突問題

衝突原因:

Spring會把各個組件放到緩存池中,如果是以id標識唯一性的話,那麼如果兩個組件的id相同則會發生衝突。

Caused by: org.springframework.context.annotation.ConflictingBeanDefinitionException: 

Annotation-specified bean name 'userDao' for bean class [com.raycloud.dao.UserDao] conflicts with existing, non-compatible bean definition of same name and class [com.raycloud.order.common.dao.impl.UserDao]



問題重現:

有兩個項目qian-trade-web和qian-order-mobile,兩者都需要用到userDao。本來qian-order-mobile應該是直接使用qian-trade-web的,但是隨之引用的依賴過多,所以自己又寫了一個userDao,放在qian-order-common裏面。

現在開發qian-trade-web,需要引用qian-order-common。所以此時qian-trade-web的Spring緩存池裏面是有兩個id爲userDao的組件,導致衝突。


解決辦法:

1.更改qian-order-common裏面userDao注入到Spring緩存池的id。但是如果項目開發有一段時間了,這個操作可能會造成一些遺漏修改。

2.掃描過濾。

不讓Spring對qian-order-common的userDao進行掃描,這樣就不會產生兩個id相同的組件了。


後續問題:

qian-order-common裏面有這個文件“user-sqlmap.xml”,裏面bean的typeAlias同樣衝突了,需要更改。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章