Dhanji在其book about Dependnecy Injection中鼓勵在命名spring bean時使用名稱空間。Spring:使用ID中的名稱空間的bean與SPeL衝突
Qutation從書:
我也強烈鼓勵命名空間的使用,例如,「set.BinaryTree」和 「set.HashTable」,這是更好的閱讀和理解比「binaryTreeSet」 和「hashTableSet」。命名空間是您的關鍵空間的更優雅和自然的命名法,並且明顯比字符串分組的大寫字母 更可讀。
現在聽起來很合理。但是從SPeL開始,就產生了衝突。 奧茲用於黑色安息日玩,所以每一個樂隊成員,我將使用BS namespance在bean名字像這樣:
<bean id="bs.ozzy"
class="sk.spring.idol.annotation.Instrumentalist"
p:song="Sabbath Bloody Sabbath" />
現在我有黑色安息日的其他成員,誰將會對注入價值歌曲名稱使用SpEL。無論歌曲播放奧茲也將發揮我的新成員(比方說託尼):
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名稱,並且不會將其評估爲屬性」?
注:
- 的代碼示例由Dhanji的書的啓發。
- 我承認 - 我沒有閱讀規劃環境地政司整個文檔,可能的解決方案是非常簡單得多
我同意,命名空間不應該有 「」作爲分隔符,如果使用SPeL的話。但是你知道,我們有很大的代碼庫,現在我們不應該使用SPeL或重寫這個東西。 :/ – Xorty