java.beans.PropertyEditor
PropertyEditor實現(xiàn)的是雙向類型轉(zhuǎn)換:String和Object互轉(zhuǎn)爽室。調(diào)用setValue()方法后捶朵,需要先“緩存”起來后續(xù)才能夠使用(輸出)
java doc中重要的一句話:
PropertyEditor 類為希望允許用戶編輯給定類型的屬性值的 GUI 提供支持。
PropertyEditor 支持各種不同的顯示和更新屬性值的方式美浦。大多數(shù) PropertyEditor 只需要支持此 API 中可用的不同選項的子集甫男。
JDK對PropertyEditor接口提供了一個默認實現(xiàn)java.beans.PropertyEditorSupport攘已,因此我們?nèi)粜钄U展此接口,僅需繼承此類澜共,根據(jù)需要復(fù)寫getAsText/setAsText這兩個方法即可向叉,Spring無一例外都是這么做的。
PropertyEditor作為一個JDK原生接口嗦董,內(nèi)置了一些基本實現(xiàn)來服務(wù)于GUI程序母谎,如:
BooleanEditor:將true/false字符串轉(zhuǎn)換為Boolean類型
IntegerEditor:將字符串轉(zhuǎn)換為Integer類型
同類別的還有LongEditor、FloatEditor...
JDK內(nèi)置的實現(xiàn)比較少(如上)京革,功能簡陋奇唤,但對于服務(wù)GUI程序來說已經(jīng)夠用,畢竟界面輸入的只可能是字符串匹摇,并且還均是基礎(chǔ)類型咬扇。但這對于復(fù)雜的Spring環(huán)境、以及富文本的web環(huán)境來說就不夠用了廊勃,所以Spring在此基礎(chǔ)上有所擴展懈贺,因此才有了本文來討論。
這么一來PropertyEditorSupport就是有狀態(tài)的了坡垫,因此是線程不安全的梭灿。在使用過程中需要特別注意,避免出現(xiàn)并發(fā)風險冰悠。
官方的javadoc都說得很清楚:PropertyEditor設(shè)計是為GUI程序服務(wù)的堡妒,那么Spring為何看上它了呢?
試想一下:那會的Spring只能支持xml方式配置溉卓,而XML屬于文本類型配置皮迟,因此在給某個屬性設(shè)定值的時候搬泥,書寫上去的100%是個字符串,但是此屬性對應(yīng)的類型卻不一定是字符串万栅,可能是任意類型佑钾。你思考下西疤,這種場景是不是跟GUI程序(AWT)一毛一樣:輸入字符串烦粒,對應(yīng)任意類型。
基于PropertyEditor的類型轉(zhuǎn)換作為一種古老的代赁、遺留下來的方式扰她,是具有一些設(shè)計缺陷的,如:職責不單一芭碍,類型不安全徒役,只能實現(xiàn)String類型的轉(zhuǎn)換等。雖然自Spring 3.0起提供了現(xiàn)代化的類型轉(zhuǎn)換接口窖壕,但是此部分機制一直得以「保留」忧勿,保證了向下兼容性。
新一代類型轉(zhuǎn)換接口Converter瞻讽、GenericConverter
其中一部分搬運自:https://mp.weixin.qq.com/s/Afu8YYyREoynAXS6YrJe7g
建議閱讀:
https://link.zhihu.com/?target=https%3A//mp.weixin.qq.com/s/5daOOdhIFqrGbpgtnuQMNw
https://link.zhihu.com/?target=https%3A//mp.weixin.qq.com/s/Afu8YYyREoynAXS6YrJe7g
https://link.zhihu.com/?target=https%3A//mp.weixin.qq.com/s/--UO3pH1nxTW3f5nQvEnkg
有關(guān)PropertyEditorRegistrar接口鸳吸,spring提供的用于自定義PropertyEditor的接口,建議閱讀:
https://blog.csdn.net/qq_43414291/article/details/111226055