建立一個簡單spring例項,spring單例與多例,初始化與銷燬
阿新 • • 發佈:2019-01-05
(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();
}
}
結果: