欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

bean的作用域

程序员文章站 2022-05-03 13:05:50
...

Bean 的作用域

在 Spring 中, 可以在 <bean> 元素的 scope 属性里设置 Bean 的作用域. 

默认情况下, Spring 只为每个在 IOC 容器里声明的 Bean 创建唯一一个实例, 整个 实例IOC 容器范围内都能共享该bean :所有后续的 getBean() 调用和 Bean 引用都将返回这个唯一的 Bean 实例.该作用域被称为 singleton, 它是所有 Bean 的默认作用域.

bean的作用域

<?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">
	
	<!-- 
		scope:配置bean的作用域
			singleton: 单例. 整个IOC容器中只有一个bean的实例.而且该bean的实例会在IOC容器实例化
的时候创建.
			prototype: 原型的. 在整个IOC容器中有多个bean的实例. 每次通过getBean方法获取bean的
实例时,IOC容器都会创建一个新的对象返回.							   
			request:一次请求之间.
			session:一次会话之间.
	 -->
	<bean id="address" class="com.learn.spring.autowire.Address" scope="prototype">
		<property name="city" value="BeiJing"></property>
		<property name="street" value="SiDaoKou"></property>
	</bean>

</beans>
package com.learn.spring.scope;

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

import com.learn.spring.autowire.Address;
import com.learn.spring.autowire.Person;

public class Main {
	public static void main(String[] args) {
		//1.实例化容器
		ApplicationContext ctx = 
				new ClassPathXmlApplicationContext("spring-scope.xml");
		
		//2.获取bean
		Address address = (Address)ctx.getBean("address");
		System.out.println("address:" + address);
		
//		
		Address address1  = (Address)ctx.getBean("address");
		System.out.println("address1:" +address1);
		
		System.out.println(address == address1);
	}
}