公司最近要將全部的項目微服務化,作成統一管理,小編負責當前項目的微服務改造工做,在接入spring-cloud的過程當中不可避免的遇到一些有意思的事情,把他寫下來,供諸君雅賞
遇到一個小問題Bean衝突,看下圖報錯信息
從詞義能夠看出一個地方引用的名叫metricRegistry的bean原來在兩個地方都被定義成了beanspring
做爲正常人只能先去看一下是否能夠刪除其中一個jar包,發現這條路是走不通的只能去排除其中一個Bean了
這個就要講到今天要說的兩個註解了 @Qualifier 和 @Primaryapp
This annotation may be used on a field or parameter as a qualifier for candidate beans when autowiring. It may also be used to annotate other custom annotations that can then in turn be used as qualifiers.這個註釋可用於做爲預備bean的字段或參數,也能夠用在其餘的自定義註釋下
@Qualifier(「XXX」) Spring的Bean注入配置註解,該註解指定注入的Bean的名稱,Spring框架使用byName方式尋找合格的bean,這樣就消除了byType方式產生的歧義。框架
Indicates that a bean should be given preference when multiple candidates are qualified to autowire a single-valued dependency. If exactly one ‘primary’ bean exists among the candidates, it will be the autowired value. This annotation is semantically equivalent to the {@code} element’s {@code primary} attribute
不難看出若是用primary註解其中一個bean就要優先於其餘的Bean,固然這個對於這種三方jar包最好不要添加的,誰知道它會不會後期又出什麼幺蛾子,只能改本身的代碼了最後的方案是改爲@qualifiel(「getMetricRegistry」),選取了其中一個bean注入ide