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

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

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

    Vincent

    Vicent's blog
    隨筆 - 74, 文章 - 0, 評論 - 5, 引用 - 0
    數據加載中……

    Spring技巧之活用FactoryBean

    Spring中有兩種類型的Bean,一種是普通Bean,另一種是工廠Bean,即FactoryBean。工廠Bean跟普通Bean不同,其返回的對象不是指定類的一個實例,其返回的是該工廠Bean的getObject方法所返回的對象。在Spring框架內部,AOP相關的功能及事務處理中,很多地方使用到工廠Bean,本文簡單分析工廠Bean的用法。
    首先回顧一下普通Bean,普通的Bean直接返回指定類(配置中的class屬性的值)的一個實例,如下面的bean1將返回一個String字符串:
    <bean?name="bean1"?class="java.lang.String">
    ?
    <constructor-arg?value="我是字符串!"?/>
    ?
    </bean>?

    下面,看看一個簡單的工廠Bean:
    import?java.util.Date;
    import?org.springframework.beans.factory.FactoryBean;
    public?class?FactoryBeanDemo?implements?FactoryBean?{
    ?
    private?String?name;
    ?
    public?void?setName(String?name)
    ?{
    ??
    this.name=name;
    ?}
    ?
    public?Object?getObject()?throws?Exception?{
    ??
    if("date".equals(name))return?new?Date();
    ??
    else?return?new?String("這是一個字符串!");
    ?}
    ?
    public?Class?getObjectType()?{??
    ??
    return?"date".equals(name)?Date.class:String.class;
    ?}
    ?
    public?boolean?isSingleton()?{??
    ??
    return?false;
    ?}
    }

    下面看這個工廠Bean的配置:
    <bean?name="myFactoryBean"?class="springroad.deomo.chap4.FactoryBeanDemo"/>
    <bean?name="myFactoryBean1"?class="springroad.deomo.chap4.FactoryBeanDemo"><property?name="name"?value="date"/></bean>

    下面是測試代碼:
    Resource?res=new?ClassPathResource("springroad/deomo/chap4/demo-bean.xml");
    BeanFactory?factory
    =new?XmlBeanFactory(res);
    System.out.println(factory.getBean(
    "myFactoryBean").getClass());
    System.out.println(factory.getBean(
    "myFactoryBean1").getClass());


    輸出結果:
    class?java.lang.String
    class?java.util.Date


    由此可見,通過使用FactoryBean,我們可以得到不同類型的對象實例。這也就是我們在AOP中通過設置calss為 ProxyFactoryBean可以返回不同類型的業務對象的原理。在實際應用中若能靈活使用FactoryBean,則可以給應用程序增加很多的魔幻功能。

    一個小竅門:
      FactoryBean還藏有一個技巧,也就是在我們實際需要返回FactoryBean實例時,應該怎么辦。也就是我們在應用程序中需要通過容器得到一個FactoryBean。此時,需要使用特殊的方式,即在bean的名稱前加上一個特殊符號“&”即可。
      如,下面的代碼:
    System.out.println(factory.getBean("&myFactoryBean").getClass());
    ?System.out.println(factory.getBean(
    "&myFactoryBean1").getClass());

    輸出的結果將會是:
    class ?springroad.deomo.chap4.FactoryBeanDemo
    class ?springroad.deomo.chap4.FactoryBeanDemo?

    posted on 2006-08-22 09:52 Binary 閱讀(270) 評論(0)  編輯  收藏 所屬分類: Spring


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 视频免费1区二区三区| 久久国产免费观看精品3| 国产亚洲综合色就色| 91久久成人免费| 黄色免费网址大全| 亚洲av无码国产精品夜色午夜 | 国产亚洲美女精品久久| 亚洲日本va在线视频观看| 97av免费视频| 亚洲AV无码AV吞精久久| 亚洲国产精品SSS在线观看AV | 日韩亚洲人成在线综合日本| 国产电影午夜成年免费视频| 黄网站色视频免费观看45分钟| 亚洲av色影在线| 四虎永久精品免费观看| 久久免费观看国产99精品| 亚洲精品国产第一综合99久久| 亚洲另类激情综合偷自拍图| 毛片免费视频观看| 一个人免费视频观看在线www| 亚洲一线产区二线产区区| 亚洲色欲一区二区三区在线观看| 最近最新的免费中文字幕| 黄网站色视频免费在线观看的a站最新 | 亚洲av午夜电影在线观看| 亚洲成A人片在线观看WWW| 免费一级毛片免费播放| 国产一卡2卡3卡4卡无卡免费视频| 久久99久久成人免费播放| 在线精品亚洲一区二区| 亚洲日本在线观看| 国产国拍亚洲精品福利 | 色播在线永久免费视频网站| 国产AV旡码专区亚洲AV苍井空| 亚洲欧洲日产国产综合网| 亚洲av无码国产精品色在线看不卡| 国产曰批免费视频播放免费s| a级片在线免费看| xxxx日本在线播放免费不卡| 亚洲人成网站色7799|