<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    MicroFish

    Open & Open hits
    隨筆 - 33, 文章 - 2, 評(píng)論 - 4, 引用 - 0
    數(shù)據(jù)加載中……

    《Pro Spring》學(xué)習(xí)筆記(8)--基礎(chǔ)進(jìn)階(3)

    ?

    ????? 如果bean無(wú)法簡(jiǎn)單地通過(guò)new關(guān)鍵字來(lái)創(chuàng)建怎么辦,通常碰到這樣的情況時(shí),我們都會(huì)使用工廠模式來(lái)處理,Spring也提供了對(duì)FactoryBean的支持,當(dāng)我們配置了一個(gè)bean為FactoryBean時(shí),隨后我們獲取的則并不是該FactoryBean,Spring會(huì)通過(guò)調(diào)用FactoryBean.getObject()方法,返回真正的目標(biāo)bean。FactoryBean在Spring中的最著名應(yīng)用就是對(duì)聲明式事務(wù)的處理。
    ????? 在Spring中使用FactoryBean,我們需要編寫(xiě)一個(gè)實(shí)現(xiàn)了FactoryBean接口的類(lèi),以一個(gè)信息摘要FactoryBean為例,它主要實(shí)現(xiàn)根據(jù)不同的參數(shù),創(chuàng)建不同的MessageDigest的實(shí)例。
    public class MessageDigestFactoryBean implements FactoryBean, InitializingBean {
    ??? private String algorithmName = "MD5";
    ??? private MessageDigest messageDigest = null;
    ??? public Object getObject() throws Exception {
    ??????? return messageDigest.clone();
    ??? }
    ??? public Class getObjectType() {
    ??????? return MessageDigest.class;
    ??? }
    ??? public boolean isSingleton() {
    ??????? return true;
    ??? }
    ??? public void afterPropertiesSet() throws Exception {
    ??????? messageDigest = MessageDigest.getInstance(algorithmName);
    ??? }
    ??? public void setAlgorithmName(String algorithmName) {
    ??????? this.algorithmName = algorithmName;
    ??? }
    }
    ????? getObject方法是供Spring調(diào)用,用來(lái)返回真正的bean給其它bean的(而不是FactoryBean本身),getObjectType方法可以返回null,但如果指定了類(lèi)型,就可以使用Spring的自動(dòng)裝載功能了。isSingleton方法是指定bean是否是單例的,注意不能通過(guò)FactoryBean的配置文件來(lái)指定bean是否為單例,因?yàn)槟菢又付ǖ氖荈actoryBean本身,而不是真正的目標(biāo)bean。
    ????? FactoryBean的配置和普通bean并沒(méi)有什么區(qū)別。
    ????? 由于Bean配置文件中,各個(gè)屬性都是以String的形式配置的(除了使用ref引用其它bean外),因此,Spring在組裝bean的時(shí)候,需要把String類(lèi)型的值轉(zhuǎn)化成合適的類(lèi)型,這就需要用到JavaBean中的概念:PropertyEditor
    ????? Spring內(nèi)置了7種預(yù)先注冊(cè)的PropertyEditor:ByteArrayPropertyEditor,ClassEditor,F(xiàn)ileEditor,LocaleEditor,PropertiesEditor,StringArrayPropertyEditor,URLEditor。通過(guò)名字,我們就能清楚地知道它們對(duì)應(yīng)的類(lèi)型了。
    ????? 盡管內(nèi)置的PropertyEditor可以處理大部分常見(jiàn)的類(lèi)型,我們?nèi)匀粫?huì)碰到需要?jiǎng)?chuàng)建自己的PropertyEditor的情況。為了簡(jiǎn)化自定義PropertyEditor的創(chuàng)建,Spring提供了PropertyEditorSupport類(lèi),我們只需要擴(kuò)展該類(lèi),并實(shí)現(xiàn)其中的setAsText方法即可。
    public class PatternPropertyEditor extends PropertyEditorSupport {
    ??? public void setAsText(String text) throws IllegalArgumentException {
    ??????? Pattern pattern = Pattern.compile(text);
    ??????? setValue(pattern);
    ??? }
    }
    ????? 可以看到,實(shí)現(xiàn)一個(gè)自定義的PropertyEditor是很容易的,但怎么才能讓它起作用呢,也就是通常所說(shuō)的注冊(cè)PropertyEditor。Spring提供了兩種注冊(cè)的方式:1.通過(guò)ConfigurableBeanFactory的registerCustomEditor方法;2.在BeanFactory的配置文件中定義CustomEditorConfigurer。
    <bean name="customEditorConfigurer"
    class="org.springframework.beans.factory.config.CustomEditorConfigurer">
    ??? <property name="customEditors">
    ??????? <map>
    ??????????? <entry key="java.util.regex.Pattern">
    ??????????????? <bean class="com.apress.prospring.ch5.pe.PatternPropertyEditor"/>
    ??????????? </entry>
    ??????? </map>
    ??? </property>
    </bean>
    ????? 自定義的PropertyEditor是通過(guò)CustomEditorConfigurer的一個(gè)類(lèi)型為Map的屬性添加的,key值是自定義PropertyEditor對(duì)應(yīng)的類(lèi)型的全類(lèi)名。
    ??????在使用時(shí)需要先調(diào)用:
    CustomEditorConfigurer config =
    ??? (CustomEditorConfigurer) factory.getBean("customEditorConfigurer");
    config.postProcessBeanFactory(factory);
    ????? 來(lái)將所有自定義的ProperyEditor注冊(cè)到BeanFactory中。

    posted on 2006-12-21 10:24 劉璐 閱讀(346) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): spring

    主站蜘蛛池模板: 亚洲偷自拍拍综合网| 午夜爽爽爽男女免费观看影院| 国产成人福利免费视频| 久久久亚洲欧洲日产国码二区| 一级毛片aaaaaa免费看| 综合自拍亚洲综合图不卡区| 永久在线观看www免费视频| 亚洲福利电影一区二区?| 18禁网站免费无遮挡无码中文| 亚洲精品国产日韩| 永久免费av无码网站大全| 亚洲乱理伦片在线观看中字| 四虎影视在线永久免费观看| 九九全国免费视频| 国产精品亚洲аv无码播放| 久久99热精品免费观看动漫| 亚洲国产日韩在线成人蜜芽| 在线观看免费为成年视频| 国产成人亚洲精品蜜芽影院| a级亚洲片精品久久久久久久| 性xxxxx大片免费视频| 91亚洲性爱在线视频| 免费大黄网站在线观看| 成人电影在线免费观看| 亚洲人成网站在线观看播放青青| 免费高清在线影片一区| 91在线视频免费观看| 亚洲成a人片在线观看中文app| 日韩高清免费观看| 水蜜桃视频在线观看免费播放高清| 久久精品九九亚洲精品| 日韩成人免费aa在线看| baoyu116.永久免费视频| 亚洲AV无码久久久久网站蜜桃 | 一级视频免费观看| 亚洲综合久久综合激情久久 | 国产成人免费AV在线播放| 激情内射亚洲一区二区三区爱妻| 免费在线观看黄网站| 免费看h片的网站| 污网站在线观看免费|