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