容器管理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 .....