衝突原因:
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同樣衝突了,需要更改。