我有一個叫StatsStore
的接口。我有這個商店的2個實施。一個名爲InMemoryStatsStore
和SqlStatsStore
的內存和SQL實現。爲了注入它們,我創建了2個註釋@InMemoryStore
和@SqlStore
。所述注射是:Guice多註釋
bind(StatsStore.class)
.annotatedWith(InMemoryStore.class)
.to(InMemoryStatsStore.class);
bind(StatsStore.class)
.annotatedWith(SqlStore.class)
.to(SqlStatsStore.class);
現在我要添加註釋的新層InMemoryStringStore
和InMemoryNumberStore
之間分開,但我不能多於一個註釋到結合線添加例如以下不會編譯:
bind(StatsStore.class)
.annotatedWith(InMemoryStore.class)
.annotatedWith(NumberStoreAnnotation.class) // using named doesn't work as well
.to(InMemoryNumberStore.class);
如何添加超過一個註解更沒有使用一個單一的命名,而這樣做的層數越多我添加到它是相當複雜?所有
bind(StatsStore.class)
.annotatedWith(InMemoryStore.class)
.to(InMemoryStatsStore.class);
bind(InMemoryStatsStore.class)
.annotatedWith(NumberStoreAnnotation.class)
.to(InMemoryNumberStore.class);
感謝:
其他解決方案,我腦子裏想的是注射兩次。
感謝您提供深入的解釋和解決方案。 –
實際實現註釋的一個很好的替代方法是使用'@Pro''方法。 –
@Tavian:是!上面提到的(「很好地工作......」)。 –