Spring Framework之自定義屬性編輯器

2021-09-12 09:20:10 字數 3660 閱讀 7968

屬性轉換測試

簡單點,就是在屬性注入的時候,能夠將配置的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內部預設的屬性編輯器放在propertyeditorregistrarsspring內部預設的屬性編輯器

我們自定義的話,可以通過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),會分別判斷屬性propertyeditorregistrarscustomeditors,進而新增屬性編輯器。這裡實現第二種方式,對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自動載入功能可以非常輕易的實現定時器鏈的治理。同時,採...