1. 程式人生 > >建立一個簡單spring例項,spring單例與多例,初始化與銷燬

建立一個簡單spring例項,spring單例與多例,初始化與銷燬

(1)在配置完spring提示框架後(上一遍文章有介紹),首先建立一個專案,匯入sprig所需的jar包


然後書寫主配置檔案applicationContext.

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
           
           
           <!-- bean:將一個類的物件建立過程交給spring容器
                     class:指定類的具體路徑
                     id:唯一識別符號
                 -->
           <bean id="yellowMouseWolf" class="cn.java.ioc1.YellowMouseWolf" ></bean>
  
</beans>



又建立了一個window類,用來測試:

package cn.java.ioc1;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Window {

	public static void main(String[] args) {
		//啟動框架(context代表spring容器)
		ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");//只寫這句也可以呼叫YellowMouseWolf類中的無參構造方法
         //獲取spring容器中建立的物件(通過id值獲取)
		YellowMouseWolf yello1=(YellowMouseWolf)context.getBean("yellowMouseWolf");
		yello1.behavior();
		
	}

}
package cn.java.ioc1;

public class YellowMouseWolf {
	
	public YellowMouseWolf() {
		System.out.println("YellowMouseWolf----黃鼠狼出生");
		
	}
	
	public void behavior() {
		
		System.out.println("吃雞");
		
	}
}

如上便是一個簡單的例項。

(2)單例與多例

建立一個Dog

package cn.java.singleton2;

public class Dog {

	public Dog() {
		System.out.println("一直狗狗誕生了");
	}
	public void behavior() {
		System.out.println("狗會叫");
		
	}

}

配置檔案,這裡設定為多例

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
           
           
           <!-- bean:將一個類的物件建立過程交給spring容器
                     class:指定類的具體路徑
                     id:唯一識別符號
               scope:用來控制spring容器產生物件的方式,可以為單例也可以為多例。
                    常用的值為singleton(單例),prototype(多例),預設的是單例      
                
                 -->
           <bean id="dog" class="cn.java.singleton2.Dog" scope="prototype" ></bean>
  
</beans>






建立一個呼叫的類

package cn.java.ioc1;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import cn.java.singleton2.Dog;

public class Window {

	public static void main(String[] args) {
		//啟動框架(context代表spring容器)
		ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");//只寫這句也可以呼叫YellowMouseWolf類中的無參構造方法
         //獲取spring容器中建立的物件(通過id值獲取)
		Dog dog1=(Dog)context.getBean("dog");
		Dog dog2=(Dog)context.getBean("dog");
		Dog dog3=(Dog)context.getBean("dog");
		//獲得各自地址
		System.out.println(dog1);
		System.out.println(dog2);
		System.out.println(dog3);
		
	}

}

這是多例的結果:


dog1,dog2,dog3分別獲得了資料,而且這三個的地址不同。

這是單例的配置:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
           
           
           <!-- bean:將一個類的物件建立過程交給spring容器
                     class:指定類的具體路徑
                     id:唯一識別符號
               scope:用來控制spring容器產生物件的方式,可以為單例也可以為多例。
                    常用的值為singleton(單例),prototype(多例),預設的是單例      
                
                 -->
           <bean id="dog" class="cn.java.singleton2.Dog"  ></bean>
  
</beans>


結果如下:只輸出一個數據,而且地址相同。


(3)初始化

先看配置資訊

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
           
           
           <!-- bean:將一個類的物件建立過程交給spring容器
                     class:指定類的具體路徑
                     id:唯一識別符號
               scope:用來控制spring容器產生物件的方式,可以為單例也可以為多例。
                    常用的值為singleton(單例),prototype(多例),預設的是單例      
                init-method:表示初始化方法,只寫初始化方法的名字,不用加上();
                 -->
           <bean id="smallJi" class="cn.java.initAndDistroy.ji"  init-method="init"></bean>
  
</beans>

再看一個類:

package cn.java.initAndDistroy;

public class Ji {
	public Ji() {
		System.out.println("ji..........雞出生了");
	}
	public void init() {
		System.out.println("ji.......我是初始化方法");
		
	}
	public void behavior() {
		System.out.println("雞會打鳴");
		
	}


}

以及一個呼叫類:

package cn.java.ioc1;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import cn.java.initAndDistroy.Ji;
import cn.java.singleton2.Dog;

public class Window {

	public static void main(String[] args) {
		//啟動框架(context代表spring容器)
		ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");//只寫這句也可以呼叫YellowMouseWolf類中的無參構造方法
         //獲取spring容器中建立的物件(通過id值獲取)
		Ji ji=(Ji)context.getBean("smallJi");
		ji.behavior();
		
	}

}
結果如下:


我們看出,先執行構造方法,然後執行的是初始化方法。

銷燬:

xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
           
           
           <!-- bean:將一個類的物件建立過程交給spring容器
                     class:指定類的具體路徑
                     id:唯一識別符號
               scope:用來控制spring容器產生物件的方式,可以為單例也可以為多例。
                    常用的值為singleton(單例),prototype(多例),預設的是單例      
                init-method:表示初始化方法,只寫初始化方法的名字,不用加上();
destroy-method是銷燬方法。
--> <bean id="smallJi" class="cn.java.initAndDistroy.ji" init-method="init" destroy-method="destroy"></bean> </beans>
package cn.java.initAndDistroy;

public class Ji {
	public Ji() {
		System.out.println("ji..........雞出生了");
	}
	public void init() {
		System.out.println("ji.......我是初始化方法");
		
	}
	public void behavior() {
		System.out.println("雞會打鳴");
		
	}
	//銷燬
	public void destroy() {
		System.out.println("ji........雞掛了");
		
	}


}

package cn.java.ioc1;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import cn.java.initAndDistroy.Ji;
import cn.java.singleton2.Dog;

public class Window {

	public static void main(String[] args) {
		//啟動框架(context代表spring容器)
		ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");//只寫這句也可以呼叫YellowMouseWolf類中的無參構造方法
         //獲取spring容器中建立的物件(通過id值獲取)
		Ji ji=(Ji)context.getBean("smallJi");
		ji.behavior();
		//關閉context容器,並且銷燬容器中所有的物件
		((ClassPathXmlApplicationContext) context).close();
		
	}

}

結果: