屬性轉換測試
簡單點,就是在屬性注入的時候,能夠將配置的string型別轉為bean屬性真正的型別。
例如在spring的xml配置檔案中配置
這裡配置的configlocation
看起來是個位址,是字串型別,但是在sqlsessionfactorybean
中是resource
型別
private resource configlocation;
然後進行一系列操作並不會報錯,是因為spring內部有個預設的屬性編輯器resourceeditor
將屬性轉換了
xmlconfigbuilder = new xmlconfigbuilder(configlocation.getinputstream(), null, configurationproperties);
configuration = xmlconfigbuilder.getconfiguration();
public class resourceeditor extends propertyeditorsupport
public resourceeditor(resourceloader resourceloader, @nullable propertyresolver propertyresolver)
public resourceeditor(resourceloader resourceloader, @nullable propertyresolver propertyresolver, boolean ignoreunresolvableplaceholders)
public void setastext(string text) else
}protected string resolvepath(string path)
return this.ignoreunresolvableplaceholders ? this.propertyresolver.resolveplaceholders(path) : this.propertyresolver.resolverequiredplaceholders(path);
}@nullable
public string getastext() catch (ioexception var3)
}}
重點關注setastext(string text)
方法,實現了屬性轉換。
自定義日期轉換屬性編輯器
仿照resourceeditor
一樣,繼承propertyeditorsupport
介面,主要重寫getastext()
與setastext(string text)
方法
public class mydateeditor extends propertyeditorsupport
public string getastext()
public listgetlist()
public void setlist(listlist)
public void setastext(string text) throws illegalargumentexception catch (parseexception e)
} throw new runtimeexception("無法轉換");
}}
customeditorconfigurer新增自定義屬性編輯器
在容器中,屬性編輯器有兩種存放方式
private final setpropertyeditorregistrars = new linkedhashset(4);
private final map, class<? extends propertyeditor>> customeditors = new hashmap(4);
從spring載入流程知道,spring內部預設的屬性編輯器放在propertyeditorregistrars
spring內部預設的屬性編輯器
我們自定義的話,可以通過customeditorconfigurer
(它是乙個beanfactorypostprocessor),它會將屬性編輯器放入customeditors
public class customeditorconfigurer implements beanfactorypostprocessor, ordered
public void setorder(int order)
public int getorder()
public void setpropertyeditorregistrars(propertyeditorregistrar propertyeditorregistrars)
public void setcustomeditors(map, class<? extends propertyeditor>> customeditors)
public void postprocessbeanfactory(configurablelistablebeanfactory beanfactory) throws bean***ception
}if (this.customeditors != null)
}}
可以看到,在執行postprocessbeanfactory
時(spring執行beanfactorypostprocessor),會分別判斷屬性propertyeditorregistrars
與customeditors
,進而新增屬性編輯器。這裡實現第二種方式,對customeditors
屬性賦值
配置類myconfig
@bean
public customeditorconfigurer customeditorconfigurer()
@component
public class user
public void setdate(date date)
@value("2023年03月11日")
private date date;
public string tostring() ';
}public user(string name, integer id)
public string getname()
public void setname(string name)
public integer getid()
public void setid(integer id)
public user()
}
user user = context.getbean(user.class);
system.out.println(user.tostring()); 列印
user
Spring FrameWork 學習總結
spring framework主要包含以下內容 1.ioc 和 di ioc容器功能 例項化 初始化元件 裝配元件依賴關係 負責元件生命周管理 ioc inversion of control 是乙個重要的物件導向程式設計的法則來削減電腦程式的耦合問題,也是輕量級spring框架核心。di dep...
Spring FrameWork 總結 依賴
package x.y public class foo beanfactory對於它所管理的bean提供兩種注入依賴方式 實際上它也支援同時使用構造器注入和setter方式注入依賴 需要注入的依賴將儲存在beandefinition中,它能根據指定的propertyeditor實現將屬性從一種格式...
用Spring framework實現定時器功能
採用web自動載入timermanager來治理timer鏈,在class更新伺服器熱載入後會發生異常。這要求對timermanager進行一些非凡的處理才能保證timer鏈的正確性。使用spring framework中提供的timertask自動載入功能可以非常輕易的實現定時器鏈的治理。同時,採...