IOC Bean管理 Bean作用域
Bean对象
Bean标签分为单实例和多实例属性
- 单实例:使用单实例属性Bean创建的多个对象其实是同一个单个实例对象。
- 多实例:使用多实例属性Bean创建的多个对象是多个不同的实例对象。
单实例
Bean创建时默认为单实例;
编写一个测试类:
package com.xjy.spring.factoryBean.beanRuleArea;
public class singleBean {
}
创建它的Bean对象
<bean id="SingleBean" class="com.xjy.spring.factoryBean.beanRuleArea.singleBean" scope="singleton">
</bean>
- scope:Bean标签属性,singleton代表单实例(不写也可以,因为Bean默认是单实例)
TestDemo:
public class TestDome {
public static void main(String[] args) {
ApplicationContext context =
new ClassPathXmlApplicationContext("SpringConfig.xml");
singleBean singleBean1 =
context.getBean("SingleBean", singleBean.class);
singleBean singleBean2 =
context.getBean("SingleBean", singleBean.class);
System.out.println(singleBean1);
System.out.println(singleBean2);
}
}
创建两个singleBean对象,输出他们的内存地址
输出:
com.xjy.spring.factoryBean.beanRuleArea.singleBean@4f83df68
com.xjy.spring.factoryBean.beanRuleArea.singleBean@4f83df68
进程已结束,退出代码0
可以看到输出的值相同,代表两个实例都是同一个对象
多实例
多实例需要使用scope属性的prototype参数声明Bean为多实例Bean
创建类:
package com.xjy.spring.factoryBean.beanRuleArea;
public class prototypeBean {
}
配置XML
<bean id="Prototype" class="com.xjy.spring.factoryBean.beanRuleArea.prototypeBean" scope="prototype">
</bean>
- scope:“prototype”:声明此Bean为多实例
测试输出
com.xjy.spring.factoryBean.beanRuleArea.prototypeBean@6cf0e0ba
com.xjy.spring.factoryBean.beanRuleArea.prototypeBean@7d8995e
进程已结束,退出代码0
两个输出不同,说明两个为不同对象;
区别
XML写法区别
<!--Bean作用域-单实例和多实例--> <!--单实例--> <bean id="SingleBean" class="com.xjy.spring.factoryBean.beanRuleArea.singleBean" scope="singleton"> </bean> <!--多实例--> <bean id="PrototypeBean" class="com.xjy.spring.factoryBean.beanRuleArea.prototypeBean" scope="prototype"> </bean>
运行:
- 单实例-Singleton:单实例Bean对象在加载配置文件时就会被创建
- 多实例-Prototype:多实例Bean对象在使用时才会被创建