XML配置中,bean
標籤,init-method
用來指定bean初始化後調用的方法,destroy-method
用來指定bean銷燬前調用的方法。若是想統一設置,能夠在beans
中設置default-init-method
屬性。
註解中,@Bean
註解,initMethod用來指定bean初始化後調用的方法,destroyMethod
用來指定bean銷燬前調用的方法。spring
org.springframework.beans.factory.InitializingBean接口,在其餘初始化工做完成後,纔開始調用他的afterPropertiesSet()
方法.
org.springframework.beans.factory.DisposableBean接口,在容器銷燬時,會調用destroy()
這個方法。app
@PostConstruct和@PreDestroy不屬於spring,而是屬於JSR-250規則,平常用的較多的,仍是這兩個註解。ide
當這三種生命週期機制同時做用於同一個bean時,執行順序以下:
初始化:@PostConstruct > InitializingBean的afterPropertiesSet()方法 > init()方法。
銷燬:@PreDestroy > DisposableBean的destroy()方法 > destroy()方法。post
MyBean測試
public class MyBean implements InitializingBean, DisposableBean { private String name; public MyBean(String name) { System.out.println("name:" + name); this.name = name; } public void initMethod() { System.out.println("initMethod"); } public void destroyMethod() { System.out.println("destroyMethod"); } @PostConstruct public void postConstruct() { System.out.println("postConstruct"); } @PreDestroy public void preDestroy() { System.out.println("preDestroy"); } @Override public void destroy() throws Exception { System.out.println("destroy"); } @Override public void afterPropertiesSet() throws Exception { System.out.println("afterPropertiesSet"); } }
MyConfigthis
@Configuration public class MyConfig { @Bean(initMethod = "initMethod", destroyMethod = "destroyMethod") public MyBean myBean() { return new MyBean("張三"); } }
測試代碼spa
@Test public void test() { ApplicationContext app = new AnnotationConfigApplicationContext(MyConfig.class); System.out.println("開始銷燬"); ((AnnotationConfigApplicationContext) app).close(); }
運行結果以下
XML的配置同@bean註解,這邊不作演示。code