详述Spring XML文件配置——Bean标签scope属性
程序员文章站
2022-07-12 13:21:54
...
一、引入
当在Spring XML文件中Bean标签中的除lazy-init外各个属性均为默认值时,运行如下代码,观察结果
<?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="com.jd.vo.UserInfo" lazy-init="true">
</bean>
</beans>
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Test {
public static void main(String[] args) {
ClassPathXmlApplicationContext classPathXmlApplicationContext = new ClassPathXmlApplicationContext("application.xml");//创建IOC容器
Object object = classPathXmlApplicationContext.getBean("userInfo");//执行getBean()方法,创建对象
System.out.println(object);
}
}
观察输出结果,可得到,对象在计算机中被分配的地址。
但当我们将object再次赋值时,我们来再次观察,object对象在计算机中被分配的地址:
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Test {
public static void main(String[] args) {
ClassPathXmlApplicationContext classPathXmlApplicationContext = new ClassPathXmlApplicationContext("application.xml");//创建IOC容器并为xml中配置的类创建对象
Object object = classPathXmlApplicationContext.getBean("userInfo");
System.out.println(object);
object = classPathXmlApplicationContext.getBean("userInfo");//给object对象再次赋值
System.out.println(object);
}
}
观察运行结果:
我们发现,先后的地址相同,这就说明,IOC容器的容量只为一个对象,也就是只能为对象分配一个地址。
那当我们修改Bean标签的scope的属性时,观察结果
<?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="com.jd.vo.UserInfo" lazy-init="true" scope="prototype">/bean>
</beans>
将scope属性的值设置为"prototype",再次运行刚才的代码:
这次两次地址不同,可见当scope属性值"prototype"时,每次调用getBean()方法,都会创建一个新的对象,即实例。
且scope属性默认为“singleton”,每次调用getBean()方法产生的均为同一对象。
二、scope标签
scope总共有6种值,详细的论述如下:
【Spring源码解读】bean标签中的属性(一)你可能还不够了解的 scope 属性——弗兰克的猫
上一篇: IE浏览器上传文件时本地路径变成”C:\fakepath\”的问题 文件上传ie8
下一篇: gradle + spring4 + springmvc4 + mybatis3 + driud1 + logback1(CRUD操作)
推荐阅读
-
Spring基于xml文件配置Bean过程详解
-
荐 Spring-boot-study02-spring.xml配置文件注入组件和@Bean注解注入组件差别
-
详述Spring XML文件配置——Bean标签scope属性
-
spring 配置文件中使用了tx标签,而在xml头部没有声明报错 - spring经典问题(终极篇)
-
解决Maven项目加载spring bean的配置xml文件会提示找不到问题
-
Spring基于xml文件配置Bean过程详解
-
spring配置文件(spring的开发步骤;bean中的scope,init-method,destroy-method;bean的工厂静态方法实例化;工厂动态方法实例化)
-
spring 配置文件中使用了tx标签,而在xml头部没有声明报错 - spring经典问题(终极篇)
-
spring源码学习之:xml配置文件标签自定义
-
Spring的Bean管理(XML配置文件方式)