在Spring2.5中定製自己的屬性編輯器
本文為原創,如需轉載,請註明作者和出處,謝謝!
裝配Bean是Spring的一個非常重要的功能。我們可以通過Spring在XML檔案中配置Java Bean,然後通過ApplicationContext來獲得Bean的物件例項。在配置Bean時,需要對構造方法的引數,屬性進行初始化。對於Java簡單型別或簡單型別的List、Map等資料型別初始化非常簡單,如下面就是一個對簡單型別屬性和構造方法引數進行初始化的配置程式碼:
<!-- 要求Spring2.0或Spring2.5 scope="prototype"相當於Spring1.x的singleton="false" -->
my value1
皮球
但對於複雜型別的屬性或引數,如一個屬性的型別是另外一個Java Class,這樣就必須在配置檔案中再宣告這個Java Class,如果這種情況很多時,或是我們做的類要release時,就會給開發人員增加很多工作量。讓我們先來舉個例子。假設有兩個類:Contact和PhoneNumber,Contact的phoneNumber屬性的型別是PhoneNumber,程式碼如下:
Contact類
package bean;
public class Contact
{
private PhoneNumber phoneNumber;
public PhoneNumber getPhoneNumber()
{
return phoneNumber;
}
public void setPhoneNumber(PhoneNumber phoneNumber)
{
this.phoneNumber = phoneNumber;
}
}
PhoneNumber類
package bean;
public class PhoneNumber
{
private String number;
public PhoneNumber(String s)
{
this.number = s;
}
public String getNumber()
{
return number;
}
}
如果直接在XML配置檔案中裝配Contact類,就需要先裝配PhoneNumber類,程式碼如下:
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">
12345678
從上面的程式碼中可以看到,裝載Contact的同時,也裝載了PhoneNumber。但如果使用了屬性編輯器,就可以無需裝載PhoneNumber就可以裝載Contact了。
編寫自己的屬性編輯器的步驟很簡單,屬性編輯器類需要從java.beans.PropertyEditorSupport類繼承,在這個類中有一個setAsText方法,這個方法有一個String型別的引數,通過這個方法,可以將String型別的引數值轉換成其他型別的屬性。在這個方法中我們還需要使用一個setValue方法,就來指定轉換後的物件例項。好,現在我們來實現這個簡單的編輯器類,程式碼如下:
package editor;
public class PhoneEditor extends java.beans.PropertyEditorSupport
{
@Override
public void setAsText(String text) throws IllegalArgumentException
{
setValue(new bean.PhoneNumber(text));
}
}
這個類的程式碼非常簡單,在setAsText方法中只有一行程式碼,實際上只是建立一個PhoneNumber物件例項,並將text屬性值作為引數值傳入PhoneNumber的構造方法。接下來我們在配置檔案中安裝這個屬性編輯器(實際上是裝配org.springframework.beans.factory.config.CustomEditorConfigurer類),程式碼如下:
class="org.springframework.beans.factory.config.CustomEditorConfigurer">
從上面的程式碼可以看出,屬性編輯器是使用了CustomEditorConfigurer的customEditors屬性進行安裝的。這是一個Map型別的屬性。key的值必須是屬性編輯器最終轉換後的型別名,如在本例中,要將文字的引數值轉換成bean.PhoneNumber型別的值,因此,key必須為bean.PhoneNumber。 下面我們來使用PhoneEditor屬性編輯器類來裝配Contact類,程式碼如下:
87654321
也許大家都注意到了上面這段程式碼的變化,在設定phoneNumber屬性預設值時,不再使用標籤來引用phoneNumber物件,而是直接使用了來設定一個文字的電話號。Spring當遇到這種情況時,也就是說,某個屬性值和屬性型別不一致時(如本例中一個是文字,一個是PhoneNumber型別),會先找一下屬性型別是否有相應的屬性編輯器已經被安裝,在本例中將以bean.PhoneNumber作為key來查詢,正好找到上面安裝的PhoneEditor,因此,Spring就會呼叫PhoneEditor類中的setAsValue方法來設定PhoneNumber物件例項,然後Spring在內部又分呼叫getValue來獲得PhoneNumber物件例項,並將其賦給Contact的phoneNumber屬性。其實所有型別的bean.PhoneNumber的屬性都可以使用這個屬性編輯器。
大家可以看看,這樣做是不是簡單的多!尤其是在釋出通用的framework或程式時,就更為簡單了。在Spring中已經定義了很多這種屬性編輯器,如我們可以使用org.springframework.beans.propertyeditors.URLEditor將字串對映成java.net.URL物件。
下面的程式碼通過ApplicationContext來獲得Contact的物件例項,並輸出其phoneNumber屬性值:
import org.springframework.context.*;
import org.springframework.context.support.*;
public class Test
{
public static void main(String[] args)
{
ApplicationContext context = new
FileSystemXmlApplicationContext("src\applicationContext.xml");
bean.Contact contact = (bean.Contact) context.getBean("contact");
System.out.println(contact.getPhoneNumber().getNumber());
}
}
注:實際上,屬性編輯器本身是由Java提供了,Spring只是利用了這一特性使裝配一個Bean更容易而已。
裝配Bean是Spring的一個非常重要的功能。我們可以通過Spring在XML檔案中配置Java Bean,然後通過ApplicationContext來獲得Bean的物件例項。在配置Bean時,需要對構造方法的引數,屬性進行初始化。對於Java簡單型別或簡單型別的List、Map等資料型別初始化非常簡單,如下面就是一個對簡單型別屬性和構造方法引數進行初始化的配置程式碼:
<!-- 要求Spring2.0或Spring2.5 scope="prototype"相當於Spring1.x的singleton="false" -->
但對於複雜型別的屬性或引數,如一個屬性的型別是另外一個Java Class,這樣就必須在配置檔案中再宣告這個Java Class,如果這種情況很多時,或是我們做的類要release時,就會給開發人員增加很多工作量。讓我們先來舉個例子。假設有兩個類:Contact和PhoneNumber,Contact的phoneNumber屬性的型別是PhoneNumber,程式碼如下:
Contact類
package bean;
public class Contact
{
private PhoneNumber phoneNumber;
public PhoneNumber getPhoneNumber()
{
return phoneNumber;
}
public void setPhoneNumber(PhoneNumber phoneNumber)
{
this.phoneNumber = phoneNumber;
}
}
PhoneNumber類
package bean;
public class PhoneNumber
{
private String number;
public PhoneNumber(String s)
{
this.number = s;
}
public String getNumber()
{
return number;
}
}
如果直接在XML配置檔案中裝配Contact類,就需要先裝配PhoneNumber類,程式碼如下:
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">
從上面的程式碼中可以看到,裝載Contact的同時,也裝載了PhoneNumber。但如果使用了屬性編輯器,就可以無需裝載PhoneNumber就可以裝載Contact了。
編寫自己的屬性編輯器的步驟很簡單,屬性編輯器類需要從java.beans.PropertyEditorSupport類繼承,在這個類中有一個setAsText方法,這個方法有一個String型別的引數,通過這個方法,可以將String型別的引數值轉換成其他型別的屬性。在這個方法中我們還需要使用一個setValue方法,就來指定轉換後的物件例項。好,現在我們來實現這個簡單的編輯器類,程式碼如下:
package editor;
public class PhoneEditor extends java.beans.PropertyEditorSupport
{
@Override
public void setAsText(String text) throws IllegalArgumentException
{
setValue(new bean.PhoneNumber(text));
}
}
這個類的程式碼非常簡單,在setAsText方法中只有一行程式碼,實際上只是建立一個PhoneNumber物件例項,並將text屬性值作為引數值傳入PhoneNumber的構造方法。接下來我們在配置檔案中安裝這個屬性編輯器(實際上是裝配org.springframework.beans.factory.config.CustomEditorConfigurer類),程式碼如下:
從上面的程式碼可以看出,屬性編輯器是使用了CustomEditorConfigurer的customEditors屬性進行安裝的。這是一個Map型別的屬性。key的值必須是屬性編輯器最終轉換後的型別名,如在本例中,要將文字的引數值轉換成bean.PhoneNumber型別的值,因此,key必須為bean.PhoneNumber。 下面我們來使用PhoneEditor屬性編輯器類來裝配Contact類,程式碼如下:
也許大家都注意到了上面這段程式碼的變化,在設定phoneNumber屬性預設值時,不再使用標籤來引用phoneNumber物件,而是直接使用了
大家可以看看,這樣做是不是簡單的多!尤其是在釋出通用的framework或程式時,就更為簡單了。在Spring中已經定義了很多這種屬性編輯器,如我們可以使用org.springframework.beans.propertyeditors.URLEditor將字串對映成java.net.URL物件。
下面的程式碼通過ApplicationContext來獲得Contact的物件例項,並輸出其phoneNumber屬性值:
import org.springframework.context.*;
import org.springframework.context.support.*;
public class Test
{
public static void main(String[] args)
{
ApplicationContext context = new
FileSystemXmlApplicationContext("src\applicationContext.xml");
bean.Contact contact = (bean.Contact) context.getBean("contact");
System.out.println(contact.getPhoneNumber().getNumber());
}
}
注:實際上,屬性編輯器本身是由Java提供了,Spring只是利用了這一特性使裝配一個Bean更容易而已。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12921506/viewspace-263085/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Delphi 6.0中屬性編輯器的解決方案 (轉)
- Delphi元件與屬性編輯器 (轉)元件
- XAF 屬性編輯器(PropertyEditor)- 原理篇
- Vivado使用技巧(5):屬性編輯器的使用
- Xcode設定自己的個性屬性XCode
- CAD屬性編輯操作——物件屬性教程物件
- Unity3D引擎擴充套件中的編輯器定製方法Unity3D套件
- 在Progress編輯器中批次編譯程式編譯
- 織夢kindeditor編輯器圖片上傳增加圖片alt屬性和title屬性的方法
- 專為 Laravel 定製的 Visual Studio Code 編輯器Laravel
- Word製作屬於自己的DIY個性工具欄
- 按照谷歌瀏覽器執行 js 在html中meta屬性設定谷歌瀏覽器JSHTML
- 本地圖文直接複製到線上編輯器中地圖
- 本地圖文直接複製到HTML編輯器中地圖HTML
- 在SQLPLUS中設定預設編輯器(Linux/Unix平臺)SQLLinux
- Unity預計年底推出VR編輯器,定製你的VR遊戲世界UnityVR遊戲
- Echarts中Option屬性設定Echarts
- WPF一個簡單的屬性編輯控制元件控制元件
- UpdatePlugin:輕鬆定製出屬於你自己的app更新神器PluginAPP
- Angular在sublime編輯器中如何新增註釋???Angular
- 在url中通過屬性名獲取屬性值
- python中__setattr__的屬性設定Python
- sping中 schemaLocation 屬性設定
- 在Excel2010中設定圖片屬性Excel
- 編輯器設定字型時找不到自己安裝的字型(Emeditor為例)解決方法
- linux中vi編輯器的使用Linux
- React 中整合 Markdown編輯器React
- wordpress 設定編輯器預設模式模式
- 在 WebSphere Process Server 中為新的查詢要求設定自定義屬性WebServer
- markdown編輯器typora本地圖片上傳到自己的伺服器地圖伺服器
- WPF中Dependency屬性設定順序的心得
- liferay中如何定製自己的登陸機制?
- js如何獲取給定屬性的屬性值JS
- 如何將c#線上編輯器嵌入自己專案C#
- 使用Vue製作一個屬於自己的音樂播放器!Vue播放器
- 地圖編輯器開發中的心得地圖
- Linux系統中的Vim編輯器Linux
- 教你如何完美儲存Html編輯器編輯過的文字到Word中HTML