配置bean的作用域:
- 默认状态下绝大多数是单例,在bean配置里加入scope="prototype"就可以改变单例状态变成多例状态。
配置好bean以后测试
<bean id="mybean" class="cn.itshow.MyBean">//单例,测试结果为true
<bean id="mybean" class="cn.itshow.MyBean" scope="prototype">//测试结果为false,说明为多例
@Autowired
private MyBean mybean1;
@Autowired
private MyBean mybean2;
@Test
public void testBean(){
System.out.println(mybean1 == mybean2);//true -- false
}
配置懒加载
BeanFactory默认是懒加载方式(在获取时才去创建)
ApplicationContext默认是迫切加载(在创建容器时就创建对象)
单个bean需要懒加载,直接在bean中加入 lazy-init=“true”。
<bean id="other" class="cn.it.show.OtherBean" lazy-init="true"></bean>
全部bean需要懒加载是在spring的申明约束后面加上default=lazy-init=“true”
<?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 d" default-lazy-init="true">
Spring中bean的生命周期
Spring中Bean的生命周期:Spring中管理的对象从创建到销毁的一个过程。
-
实例化和初始化:
实质是Spring容器帮我们调用了无参构造(创建对象)和指定的初始化方法(一般做初始化工作)
如果Spring容器是BeanFactory,在对象使用的时候调用【懒加载】
如果Spring容器是ApplicationContext,默认在创建容器的时候调用【迫切加载】
注意:单例才是迫切加载。
多例不是,多例的对象还是懒加载(因为它不知道创建多少个对象,只有在获取的时候才知道你需要多少个对象) -
销毁:
实质上也是Spring容器去调用指定销毁方法,但是仅仅是的调用了这个方法,并没有销毁这个对象,可以在销毁方法中做一些销毁和清理工作【释放资源,关流,关闭连接】。
这个销毁方法一般是在容器关闭的时候调用,但是在Springtest中用完之后会自动关闭容器,就会自动调用销毁方法
一般情况下初始化和销毁不用管,框架中会自动进行管理。