三種方式在spring容器中為bean實現初始化方法和銷毀方法


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM