5. Spring4.x Bean的初始化和销毁

  1. 新建一个普通的类
package com.xiaohan.ch2.prepost;

/**
 * Java配置方式
 */
public class BeanWayService {
    public void init() {
        System.err.println("@Bean-init-method");
    }

    public void destroy() {
        System.err.println("@Bean-destory-method");
    }

    public BeanWayService() {
        System.err.println("BeanWayService构造函数");
    }
}
  1. 新建一个使用注解指定了初始化方法 和 销毁前方法
package com.xiaohan.ch2.prepost;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;

/**
 * 注解方式
 */
public class AnnotationWayService {

    // 2    实例化后
    @PostConstruct
    public void init() {
        System.err.println("Annotation-init-method");
    }

    // 3    销毁前
    @PreDestroy
    public void destroy() {
        System.err.println("Annotation-destory-method");
    }

    // 1    构造
    public AnnotationWayService() {
        System.err.println("AnnotationWayService构造函数");
    }
}
  1. 配置类
package com.xiaohan.ch2.prepost;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;

@Configuration
@ComponentScan("com.xiaohan.ch2.prepost")
public class PrePostConfig {

    @Bean
    public AnnotationWayService annotationWayService() {
        return new AnnotationWayService();
    }

    // 指定初始化方法 和 销毁前方法
    @Bean(initMethod = "init", destroyMethod = "destroy")
    public BeanWayService beanWayService() {
        return new BeanWayService();
    }
}
  1. Main测试
package com.xiaohan.ch2.prepost;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;

// Bean的初始化和销毁
public class Main {
    public static void main(String[] args) {
        // 这里不使用ApplicationContext接口接收了 因为没有close方法
        AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(PrePostConfig.class);
        ac.close();
    }
}

输出 可以看到 先实例化的 后销毁

AnnotationWayService构造函数
Annotation-init-method
BeanWayService构造函数
@Bean-init-method
@Bean-destory-method
Annotation-destory-method

你可能感兴趣的:(5. Spring4.x Bean的初始化和销毁)