singleton:此模式會在ApplicationContext建立後建立組態檔中所有的singleton元件,也就是說在「ApplicationContext context = new ClassPathXmlApplicationContext("beans.config.xml");」

                  這一行時物件該new的都new了,呼叫getBean只是回傳已經new好的Bean物件而已

                  使用singleton又不希望建立後就new,則要在設定檔中加上<bean lazy-init="true">

 

prototype:getBean的時候才new出物件(事前不存在),每getBean一次就new一個新的

 




public class TestScope {

 

    public static void main(String[] args) {

       ApplicationContext context = new ClassPathXmlApplicationContext("beans.config.xml");

      

       DemoBean demoBean0 = (DemoBean) context.getBean("demoBean0");

       System.out.println("demoBean0="+demoBean0);

      

       DemoBean demoBean1 = (DemoBean) context.getBean("demoBean0");

       System.out.println("demoBean1="+demoBean1);

    }

 

}

  





如果在設定檔xml中沒有設定Scope的話,預設是singleton,只要呼叫相同id就會是同一個物件

  <bean id="demoBean0" class="model.DemoBean" >

       <constructor-arg value="這是一個demovalue1,用建構子一個參數"></constructor-arg>

    </bean>


demoBean0=model.DemoBean@158fe70
demoBean1=model.DemoBean@158fe70

 



如果在設定檔xml中有設定Scope="prototype"的話,呼叫相同id就會是(呼叫、new)不同一個物件   

 

<bean id="demoBean0" class="model.DemoBean" scope="prototype">

       <constructor-arg value="這是一個demovalue1,用建構子一個參數"></constructor-arg>

    </bean>


demoBean0=model.DemoBean@158fe70
demoBean1=model.DemoBean@11aa95a

 



以上結果用hashcode方法也是一樣

來源:http://openhome.cc/Gossip/JavaEssence/ObjectEquality.html

在Object的hashCode() 說明 指出:

  • 在同一個應用程式執行期間,對同一物件呼叫 hashCode()方法,必須回傳相同的整數結果。
  • 如果兩個物件使用equals(Object)測試結果為相等, 則這兩個物件呼叫hashCode()時,必須獲得相同的整數結果。
  • 如果兩個物件使用equals(Object)測試結果為不相等, 則這兩個物件呼叫hashCode()時,可以獲得不同的整數結果。
arrow
arrow
    全站熱搜

    乙方 發表在 痞客邦 留言(0) 人氣()