2 回答

TA貢獻(xiàn)1816條經(jīng)驗 獲得超4個贊
似乎您混淆了 CDI 注釋。該@Named("my_custom_name")注釋用于指代班/ IMPL明確,如:
@Inject
@Named("my_custom_name")
ConcurrencyService service;
如果您沒有在@Namedthen 中定義自定義名稱,則默認(rèn)情況下它會選擇 class name ,因此您不會遇到該錯誤。在你的例子中:
@Named
MySqlLogService
將被稱為mySqlLogService和
@Named
MySqlConcurrencyService
將被稱為mySqlConcurrencyService,但我仍然不明白你想要實現(xiàn)的目標(biāo)。
范圍不是用 定義的@Named,而是使用:
@RequestScoped
@SessionScoped
@ApplicationScoped
@ConversationScoped
更多信息here和here是2個例子i ii
對于范圍檢查 oracle 的頁面
也是一個很好的博客,解釋了預(yù)選賽

TA貢獻(xiàn)1875條經(jīng)驗 獲得超5個贊
@Named
無論類型如何,兩個啟用的 bean都不能具有相同的 bean 名稱(via )。
既然是CDI,那我們看看CDI規(guī)范怎么樣?讓我們從2.6開始。Bean names,它指出:
...在非類型安全環(huán)境(如統(tǒng)一表達(dá)式語言)中使用時,可以通過名稱引用具有名稱的 bean。...
因此,您可以在不引用其類型的情況下使用該 bean。因此需要能夠?qū)?bean 名稱解析為一個特定的 bean。例如,當(dāng)您從 JSF 頁面使用 EL 時。
再往前一點,它寫道:
根據(jù)Ambiguous names 中定義的限制,多個 bean 可以共享相同的 bean name。
這允許您實際上“破壞”名稱的唯一性,只要您可以保證在類型安全解析結(jié)束時,只會找到一個具有該給定名稱的 bean。
確保您的 bean 具有唯一的名稱并且它會起作用。如果它只是您所追求的限定符,那么使用@Named
會帶來您可能不需要的開銷。只需創(chuàng)建自己的限定符并從那里開始。
添加回答
舉報