1. 程式人生 > >Spring IOC 應用 (1)管理物件

Spring IOC 應用 (1)管理物件

一,搭建Spring IOC開發環境

1,引入相關jar包(IOC jar包)

2,在src新增applicationContext.xml

二,建立物件

1,在applicationContext.xml中加入<beans>父標籤和<bean>子標籤,我們將在該XML檔案中定義(與原來直接在類中用Calendar c=new GregorianCalender();不同,以下方法更適用於大專案的物件建立)

       <!-- 採用 new  GregorianCalendar()  構造方法-->
       <bean id="c1" class="java.util.GregorianCalendar"></bean>
        <!-- 採用 Calendar.getInstance()  靜態方法-->
	<bean id="c2" class="java.util.Calendar" factory-method="getInstance"></bean>
	<!-- 採用 C2.getTime()方法      物件工廠方法-->
	<bean id="date" factory-bean="c2" factory-method="getTime"></bean>

2,在main方法中,需要建立application容器,來獲取物件:

         //建立application容器
	 String conf= "applicationContext.xml";
	 ApplicationContext ac=new ClassPathXmlApplicationContext(conf);
	 //從Spring容器獲取c1
	Calendar c1=ac.getBean("c1",Calendar.class);
        Calendar c2=ac.getBean("c2",Calendar.class);
	Date  d1=ac.getBean("date", Date.class);
	//使用通過輸出到控制檯來檢測效果
	System.out.println(c1);
	System.out.println(c2);
	System.out.println(d1);

三,初始化和銷燬物件,釋放容器

1.在applicationContext.xml中的bean標籤內新增屬性 init-method和destroy-method

<!--  範圍一般預設是單例 singleton  lazy-init true是為了不讓他在建立spring容器的時候就初始化建構函式和初始化函式-->
	<bean id="m1" scope="singleton"  lazy-init="true" class="Package1.Mymessage" init-method="init" destroy-method="mydestory" ></bean>
	
	

2,在類方法中

public void init(){
	  System.out.println("我是init!");
  }
  public void mydestory(){
	  System.out.println("我是destory!");
  }
  public void Mymessage(){
	  System.out.println("我是結構函式");
  }
  public void fly(){
	  System.out.println("我可以飛起來");
  }

3.釋放spring容器,在main類中

	AbstractApplicationContext ac1=new ClassPathXmlApplicationContext(conf);
	 ApplicationContext ac2=new ClassPathXmlApplicationContext(conf);
	Mymessage m1=ac.getBean("m1", Mymessage.class);
	m1.fly();
	//ac2.close();會報錯 
    ac1.close();//需要在ApplicationContext 前面加上Abstract

補充知識:spring bean作用域有以下5個:

 singleton:單例模式,當spring建立applicationContext容器的時候,spring會欲初始化所有的該作用域例項,加上lazy-init就可以避免預處理;

單例的目的:保證一個類只有單一的例項,也就是說你無法通過new來建立這個類的一個新例項。

單例的好處:當一個物件在程式內部只能有一個例項的時候,它可以保證我們不會重複建立,而是始終指向同一個物件。

Singleton通過將構造方法限定為private避免了類在外部被例項化,在同一個虛擬機器範圍內,Singleton的唯一例項只能通過getInstance()方法訪問。

   prototype:原型模式,每次通過getBean獲取該bean就會新產生一個例項,建立後spring將不再對其管理;

====下面是在web專案下才用到的===

request:搞web的大家都應該明白request的域了吧,就是每次請求都新產生一個例項,和prototype不同就是建立後,接下來的管理,spring依然在監聽

session:每次會話,同上

global session:全域性的web域,類似於servlet中的application