天天看点

Spring总结——Bean的生命周期Bean的生命周期

文章目录

  • 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);
	}
}
           

延时加载:

  • lazy-init="true"

    当spring容器调用getBean方法时,对象才创建出来。

据说,在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();
	}
}