InitializingBean接口聽過bean的初始化防范,只包括afterPropertiesSet方法,凡是繼承接口的類,在初始化bean的時候都會執行該方法。 import org.springframework.beans.factory.InitializingBean; public class TestInitializingBean implements InitializingBean{ @Override public void afterPropertiesSet() throws Exception { System.out.println("ceshi InitializingBean"); } public void testInit(){ System.out.println("ceshi init-method"); } }
bean的InitMethod和DestroyMethod
1:在配置類中 @Bean(initMethod = "init",destroyMethod = "destory")注解指定
2:實現InitializingBean重寫其afterPropertiesSet方法,重寫DisposableBean重寫destroy方法
3:利用java的JSR250規范中的@PostConstruct標注在init方法上,@PreDestroy標注在destroy注解上
需要注意:
單實例bean,容器啟動時創建 對象
多實例bean,沒次獲取時創建對象
初始化:對象創建完成,復制完成,調用初始化方法
銷毀:單實例,容器關閉時調用,多實例,容器不會銷毀,只能手動調用銷毀方法
類:
public class Car {
public Car() {
System.out.println("Car's Constructor..");
}
public void init(){
System.out.println("Car's Init...");
}
public void destory(){
System.out.println("Car's Destroy...");
}
}
配置類:
public Car car(){
return new Car();
}
總結:
1、Spring為bean提供了兩種初始化bean的方式,實現InitializingBean接口,實現afterPropertiesSet方法,或者在配置文件中通過init-method指定,兩種方式可以同時使用。
2、實現InitializingBean接口是直接調用afterPropertiesSet方法,比通過反射調用init-method指定的方法效率要高一點,但是init-method方式消除了對spring的依賴。
3、如果調用afterPropertiesSet方法時出錯,則不調用init-method指定的方法。