文章目录
- Bean的生命周期
-
- 加载方式|lazy-init属性
- Bean的初始化和销毁
Bean的生命周期
加载方式|lazy-init属性
用于设置Spring容器加载对象的方式,有两种方式:
立即加载:
-
或者不写lazy-init="false"
-
lazy-init="default"
spring容器一启动,会解读
ApplicationContext.xml
文件,不管你是不是要使用该bean,都会先创建对象。这会造成启动的时候,特别的慢。但是,也是最保险的方法。
xml文件
<?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只用一个 -->
<bean id="f" class="com.jp.domain.Person" lazy-init="false"></bean>
<bean id="p" class="com.jp.domain.Person" lazy-init="false"></bean>
</beans>
代码
public class Demo {
/*
* Spring通过默认的构造函数创建对象
*/
@Test
public void test1(){
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
Object bean = ac.getBean("p");
Person p = (Person) bean;
System.out.println(p);
}
}
延时加载:
-
当spring容器调用getBean方法时,对象才创建出来。lazy-init="true"
据说,在spring设置lazy-init=true的情况下,一个应用可以从 55 秒下降到 8 秒
xml文件
<?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只用一个 -->
<bean id="f" class="com.jp.domain.Person" lazy-init="true"></bean>
<bean id="p" class="com.jp.domain.Person" lazy-init="true"></bean>
</beans>
代码同上
Bean的初始化和销毁
init-method属性
调用初始化方法
destroy-method属性
调用销毁方法
xml文件
<?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="p" class="com.jp.domain.Person" lazy-init="false" init-method="init" destroy-method="destory"></bean>
</beans>
代码
public class Demo {
/*
* Bean对象什么时候创建出来的呢?
*
* 1、首先spring容器通过默认的构造函数创建对象
*
* 2、init-method="init" 调用初始化方法
*
* 3、talk() 调用对象的相关方法
*
* 4、destroy-method="destory" 调用销毁方法
*/
@Test
public void testLife(){
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
Person p = (Person) ac.getBean("p");
p.talk();
}
}