容器管理bean的生命周期,我們可以自定義初始化和銷毀方法;容器在bean進行到當前生命周期的時候來調用我們自定義的初始化和銷毀方法。
下面演示三種bean的 初始化和銷毀方法。
第一種,利用@Bean注解中自帶的 initMethod()和 destroyMethod()。
第二種,實現 InitializingBean和 DisposableBean接口中的 afterPropertiesSet()和 destroy()方法。
第三種,可以使用JSR250,@PostConstruct(在bean創建完成並且屬性賦值完成;來執行初始化方法)和 @PreDestroy(在容器銷毀bean之前通知我們進行清理工作)
public class Car { private int id; public int getId() { return id; } public void setId(int id) { this.id = id; } public Car() { System.out.println("Car Constructor....."); } public void init() { System.out.println("Car init ....."); } public void destory() { System.out.println("Car destory ....."); } }
public class Cat implements InitializingBean, DisposableBean { public Cat() { System.out.println("Cat 構造方法 。。。。。。"); } @Override public void destroy() throws Exception { System.out.println("Cat 銷毀方法"); } @Override public void afterPropertiesSet() throws Exception { System.out.println("Cat 初始化方法 。。。。。。"); } }@Configuration
public class Dog {
public Dog() {
System.out.println("dog construct......");
}
//對象創建並賦值之后調用
@PostConstruct
public void init()
{
System.out.println("dog init @PostConstruct .....");
}
@PreDestroy
public void destory()
{
System.out.println("dog destory @PreDestroy .....");
}
@Import(Dog.class)
@Configuration public class Config1 { @Bean(initMethod = "init",destroyMethod = "destory") public Car car (){ return new Car(); } @Bean public Cat cat(){ return new Cat(); } }
public class App { public static void main(String[] args) { AnnotationConfigApplicationContext context=new AnnotationConfigApplicationContext(Config1.class); String[] beanDefinitionNames = context.getBeanDefinitionNames(); for (String n:beanDefinitionNames) { System.out.println(n); } context.close(); } }
運行結果:
dog construct...... dog init @PostConstruct ..... 13:41:29.489 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'car' Car Constructor..... Car init ..... 13:41:29.522 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'cat' Cat 構造方法 。。。。。。 Cat 初始化方法 。。。。。。 org.springframework.context.annotation.internalConfigurationAnnotationProcessor org.springframework.context.annotation.internalAutowiredAnnotationProcessor org.springframework.context.annotation.internalCommonAnnotationProcessor org.springframework.context.event.internalEventListenerProcessor org.springframework.context.event.internalEventListenerFactory config1 com.yuan.beancycle.model.Dog car cat 13:41:29.577 [main] DEBUG org.springframework.context.annotation.AnnotationConfigApplicationContext - Closing org.springframework.context.annotation.AnnotationConfigApplicationContext@544a2ea6, started on Mon Aug 05 13:41:29 CST 2019 Disconnected from the target VM, address: '127.0.0.1:64811', transport: 'socket' Cat 銷毀方法 Car destory ..... dog destory @PreDestroy .....