詳述Spring框架中scope作用

首先創建一個UserInfo類,然後在application.xml中添加該類:

package club.affengkuang.vo;

public class UserInfo {
	
	public UserInfo() {
		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.xsd">

	<bean id="userInfo" class="club.affengkuang.vo.UserInfo" lazy-init="true"></bean>
</beans>

這時我們在測試類中創建一個UserInfo類的IOC容器並從中獲取兩次對象,並分別打印他們的值,會發現兩次獲取的對象是同一個對象:

package club.affengkuang.test;

import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Test {

	public static void main(String[] args) {
		ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("application.xml");
		Object object = applicationContext.getBean("userInfo");
		System.out.println(object);
		object = applicationContext.getBean("userInfo");
		System.out.println(object);
		applicationContext.close();
	}
}

這就是scope在作用,scope有四個值:

prototype:在容器中每次都可以創建一個新對象
singleton:容器中只能創建一個對象
session:同一個session裏只創建一個對象
request:同一個request裏只創建一個對象

其中後兩個是在Javaweb項目中使用的,而scope的默認值也就是singleton,所以例子中在IOC容器中兩次獲取對象獲取到的是同一個對象。

這時我們將scope的值修改爲prototype再執行測試類中代碼,便創建了兩個不同的對象了:

<?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.xsd">

	<bean id="userInfo" class="club.affengkuang.vo.UserInfo" lazy-init="true" scope="prototype"></bean>
</beans>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章