<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無法簡(jiǎn)單地通過new關(guān)鍵字來創(chuàng)建怎么辦,通常碰到這樣的情況時(shí),我們都會(huì)使用工廠模式來處理,Spring也提供了對(duì)FactoryBean的支持,當(dāng)我們配置了一個(gè)bean為FactoryBean時(shí),隨后我們獲取的則并不是該FactoryBean,Spring會(huì)通過調(diào)用FactoryBean.getObject()方法,返回真正的目標(biāo)bean。FactoryBean在Spring中的最著名應(yīng)用就是對(duì)聲明式事務(wù)的處理。
    ????? 在Spring中使用FactoryBean,我們需要編寫一個(gè)實(shí)現(xiàn)了FactoryBean接口的類,以一個(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)用,用來返回真正的bean給其它bean的(而不是FactoryBean本身),getObjectType方法可以返回null,但如果指定了類型,就可以使用Spring的自動(dòng)裝載功能了。isSingleton方法是指定bean是否是單例的,注意不能通過FactoryBean的配置文件來指定bean是否為單例,因?yàn)槟菢又付ǖ氖荈actoryBean本身,而不是真正的目標(biāo)bean。
    ????? FactoryBean的配置和普通bean并沒有什么區(qū)別。
    ????? 由于Bean配置文件中,各個(gè)屬性都是以String的形式配置的(除了使用ref引用其它bean外),因此,Spring在組裝bean的時(shí)候,需要把String類型的值轉(zhuǎn)化成合適的類型,這就需要用到JavaBean中的概念:PropertyEditor。
    ????? Spring內(nèi)置了7種預(yù)先注冊(cè)的PropertyEditor:ByteArrayPropertyEditor,ClassEditor,F(xiàn)ileEditor,LocaleEditor,PropertiesEditor,StringArrayPropertyEditor,URLEditor。通過名字,我們就能清楚地知道它們對(duì)應(yīng)的類型了。
    ????? 盡管內(nèi)置的PropertyEditor可以處理大部分常見的類型,我們?nèi)匀粫?huì)碰到需要?jiǎng)?chuàng)建自己的PropertyEditor的情況。為了簡(jiǎn)化自定義PropertyEditor的創(chuàng)建,Spring提供了PropertyEditorSupport類,我們只需要擴(kuò)展該類,并實(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是很容易的,但怎么才能讓它起作用呢,也就是通常所說的注冊(cè)PropertyEditor。Spring提供了兩種注冊(cè)的方式:1.通過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是通過CustomEditorConfigurer的一個(gè)類型為Map的屬性添加的,key值是自定義PropertyEditor對(duì)應(yīng)的類型的全類名。
    ??????在使用時(shí)需要先調(diào)用:
    CustomEditorConfigurer config =
    ??? (CustomEditorConfigurer) factory.getBean("customEditorConfigurer");
    config.postProcessBeanFactory(factory);
    ????? 來將所有自定義的ProperyEditor注冊(cè)到BeanFactory中。

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

    主站蜘蛛池模板: 免费91麻豆精品国产自产在线观看| 特a级免费高清黄色片| 小日子的在线观看免费| 亚洲色大成网站www永久一区| 美女视频黄.免费网址| 免费一级肉体全黄毛片| 亚洲s码欧洲m码吹潮| 香蕉视频在线观看免费国产婷婷 | 亚洲人成在线精品| 亚洲第一网站免费视频| 亚洲精品视频在线观看视频| 91九色老熟女免费资源站| 日韩亚洲Av人人夜夜澡人人爽| 亚欧免费一级毛片| 7777久久亚洲中文字幕蜜桃| 久草视频在线免费| 456亚洲人成影院在线观| 成人毛片免费观看视频在线| 国产亚洲一卡2卡3卡4卡新区 | 99在线精品视频观看免费| 亚洲人成777在线播放| 在线播放免费播放av片| 国产精品亚洲小说专区| 亚洲人妻av伦理| 在线看片免费人成视频播| 久久精品国产亚洲AV无码娇色| 免费下载成人电影| 爱爱帝国亚洲一区二区三区| 亚洲精品亚洲人成在线观看下载| 99re6在线视频精品免费下载| 久久精品国产亚洲77777| 曰批全过程免费视频在线观看| 成人亚洲国产精品久久| 亚洲高清最新av网站| 久久成人免费电影| 亚洲精品无播放器在线播放| 久久久久亚洲AV成人网人人软件| 暖暖日本免费中文字幕| 亚洲永久网址在线观看| 中国亚洲女人69内射少妇| 国产精品免费精品自在线观看|