憨厚生

          ----Java's Slave----
          ***Java's Host***

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            165 隨筆 :: 17 文章 :: 90 評論 :: 0 Trackbacks
                   spring中注入方式有多中,如構造方法,SET/GET方法等.lookup方法注入有些與其它的不一樣,此方法注入常用來得到一個非單例對象.
          lookup方法注入利用了spring ioc容器重寫bean抽象(或)具體方法的能力,從而返回指定名字的bean實例.一般用來得到一個非單例對象.
                   如果方法不是抽象的,spring回簡單地覆蓋已有的實現,在基于XML的配置文件中,通過在bean定義中使用lookup-method元素來告訴Spring所要足入/覆蓋的方法將要返回的實際bean


          Random.java

          package com.test;

          public class Random {
           private int i = (int) (100 * Math.random());

           public void printRandom() {
            System.out.println("輸出隨機整數:  " + i);
           }

          }
          ------------------------------------------------
          HelloRandom.java

          package com.test;

          public interface HelloRandom {
           public Random getRandom();
              public Random createRandom();

          }

          -------------------------------------------------
          HelloRandomAbstract.java

          package com.test;

          public abstract class HelloRandomAbstract implements HelloRandom{
           private Random random;

           public Random getRandom() {
            return random;
           }

           public void setRandom(Random random) {
            this.random = random;
           }
              //此方法建議是抽象的
           public abstract Random createRandom();

          }

          ---------------------------
          XML文件如下:
          <bean id="random" class="com.test.Random" singleton="false"/>
             
              <bean id="helloRandomAbstract" class="com.test.HelloRandomAbstract">
             
                  <lookup-method name="createRandom" bean="random"/>
                 
                  <property name="random">
                      <ref local="random"/>
                  </property>
               </bean>

          helloRandomAbstract對象有2中方式可以得到Random對象:通過getRandom() 方法,通過createRandom()方法;
          兩者有什么不同呢,前一中方法得到的同一個對象,也就是說只要getRandom(),得到的都是同一個方法;后一種方法調用一次createRandom(),每次調用得到的都是性的Random對象.這就象前面說的spring ioc容器重寫bean抽象(或)具體方法的能力,從而返回指定名字的bean實例.一般用來得到一個非單例對象.

          另外還有一種方法可以實現類似功能:
          <bean id="random" class="com.test.Random" scope="prototype"/>,因為prototype范圍的bean,在沒一次請求都會生成一個新的對象,就象是用new Random()一樣;不足是,此屬性只有在早期版本的spring不支持!
          posted on 2008-08-11 16:31 二胡 閱讀(348) 評論(0)  編輯  收藏 所屬分類: spring

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


          網站導航:
           
          主站蜘蛛池模板: 梁平县| 福鼎市| 吴江市| 南丰县| 尉氏县| 麻城市| 安龙县| 高要市| 绥阳县| 临沧市| 罗山县| 济源市| 定南县| 靖边县| 隆安县| 江孜县| 米林县| 吉首市| 福建省| 昆山市| 南投县| 开封县| 新乐市| 永新县| 绥中县| 东城区| 库车县| 永春县| 金沙县| 大方县| 贵德县| 庆元县| 新巴尔虎右旗| 康乐县| 固安县| 姜堰市| 长宁区| 大关县| 沙洋县| 溧水县| 通化市|