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