文章目錄
- 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();
}
}