Spring Configuration(四):Bean 的初始化和销毁

在我们进行实际开发的时候,经常遇到在Bean之前使用之前或者之后做些必要的操作,Spring对Bean的生命周期的操作提供了支持。在使用Java配置和注解配置下提供如下三种方式:

    1. Java配置方式:使用@Bean的initMethod和destroyMethod(相当于xml配置的init-method和destory-method):

        ① initMethod和destroyMethod指定BeanWayService类的init和destroy方法在构造函数之后,Bean销毁之前执行。
        @Configuration
        @ComponentScan("org.light4j.sping4.usually.prepost")
        public class PrePostConfig {


        @Bean(initMethod="init",destroyMethod="destroy") //①
        BeanWayService beanWayService(){
        return new BeanWayService();
        }


        @Bean
        JSR250WayService jsr250WayService(){
            return new JSR250WayService();
        }
        }


        public class BeanWayService {
      public void init(){
            System.out.println("@Bean-init-method");
        }
        public BeanWayService() {
            super();
            System.out.println("初始化构造函数-BeanWayService");
        }
        public void destroy(){
            System.out.println("@Bean-destory-method");
        }

    }


    2. 注解方式:利用JSR-250的@PostConstruct和@PreDestroy:

    ① @PostConstruct,在构造函数执行完之后执行。
② @PreDestroy,在Bean销毁之前执行。
增加JSR250支持
<dependency>
    <groupId>javax.annotation</groupId>
    <artifactId>jsr250-api</artifactId>
    <version>1.0</version>
</dependency>


public class JSR250WayService {
    @PostConstruct //①
    public void init(){
        System.out.println("jsr250-init-method");
    }
    public JSR250WayService() {
        super();
        System.out.println("初始化构造函数-JSR250WayService");
    }
    @PreDestroy //②
    public void destroy(){
        System.out.println("jsr250-destory-method");
    }

}


    3.第三种是: 通过bean实现InitializingBean和 DisposableBean接口
        public class DataInitializer implements InitializingBean,DisposableBean{  
      
        @Override  
        public void afterPropertiesSet() throws Exception {  
        System.out.println("afterPropertiesSet 被执行");  
        }  
      
        @Override  
        public void destroy() throws Exception {  
        System.out.println("destroy 被执行");  
        }    
        }  




猜你喜欢

转载自blog.csdn.net/lsxf_xin/article/details/80049383