[英]Spring: beans using namespaces in IDs conflict with SPeL
Dhanji在他的有關依賴注入的書中鼓勵在命名Spring bean時使用名稱空間。
書中的引文:
我也強烈建議使用名稱空間,例如“ set.BinaryTree”和“ set.HashTable”,比“ binaryTreeSet”和“ hashTableSet”更易於閱讀和理解。 命名空間是鍵空間的一種更為優雅自然的命名方式,比起成組的大寫字母字符串,其可讀性更為突出。
現在聽起來很合理。 但是從SPeL開始 ,出現了沖突。 Ozzy曾經在Black Sabbath演出,所以對於每個樂隊成員,我都會在bean名稱中使用bs namespance,如下所示:
<bean id="bs.ozzy"
class="sk.spring.idol.annotation.Instrumentalist"
p:song="Sabbath Bloody Sabbath" />
現在,我有另一個黑色安息日成員,他們將使用SpEL為歌曲名稱注入值。 ozzy播放的任何歌曲也將播放我的新成員(假設Tony):
public class Instrumentalist implements Performer {
@Value("#{bs.ozzy.song}")
private String song;
// blabla other stuff, getters setters and so on
}
現在我會得到的是...
Expression parsing failed; nested exception is org.springframework.expression.spel.SpelEvaluationException: EL1008E:(pos 0): Field or property 'bs' cannot be found on object
現在呢 ? 是否有某種方式可以將文本轉義為“這是bean名稱,而不將其視為屬性”?
筆記:
你可以這樣做:
@Value("#{ #this.getObject('bs.ozzy').song }")
我不確定上下文本身是否作為屬性/引用公開。
如果不是(仍在查找),則可以創建一個按名稱查找bean的函數,因此它看起來像這樣(或多或少):
@Value("#{byId('bs.ozzy').song}")
即使您可以通過方法或使用字符串鍵通過映射查找通過ID獲得bean,我還是對這個想法有些“懷疑”,因為您可能會丟失一些IDE功能。
我想我更喜歡使用_
(下划線)命名空間。 使用點將大多數希望點成為屬性分隔符/方法調用的東西弄糟(很多東西)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.