bean的作用域
程序员文章站
2022-05-03 13:05:50
...
Bean 的作用域
在 Spring 中, 可以在 <bean> 元素的 scope 属性里设置 Bean 的作用域.
默认情况下, Spring 只为每个在 IOC 容器里声明的 Bean 创建唯一一个实例, 整个 实例IOC 容器范围内都能共享该bean :所有后续的 getBean() 调用和 Bean 引用都将返回这个唯一的 Bean 实例.该作用域被称为 singleton, 它是所有 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);
}
}