Spring生命周期

一、Spring的初始化和销毁方法的3中方式

1、JSR250中@PostConstruct、@PreDestroy注解方式
2、实现Spring中提供的InitializingBean, DisposableBean接口方法
3、通过配置文件或注解方式注册初始化和销毁方法

二、代码测试
(1)主配置类代码
@Configuration
@ComponentScan(value = {"condition"})
public class SpringMainConfig {

    @Bean(initMethod = "init",destroyMethod = "destroy2")
    public Car car() {
        return new Car();
    }

    public static void main(String[] args) {
        AnnotationConfigApplicationContext ctx = ContextUtil.getContext();
        Car car = (Car) ctx.getBean("car");
        ctx.close();
    }
}
(2)Car实例代码
public class Car  implements InitializingBean, DisposableBean {
    private float price;

    public Car () {
        System.out.println("1、Car的构造方法执行");
    }

    //销毁方法
    @Override
    public void destroy() throws Exception {
        System.out.println("8、实现DisposableBean接口的destroy方法执行。");
    }

    //初始化方法
    @Override
    public void afterPropertiesSet() throws Exception {
        System.out.println("4、实现InitializingBean接口的afterPropertiesSet方法执行。");
    }

    public void init () {
        System.out.println("5、Car配置类@Bean中注册的init方法执行");
    }

    public void destroy2 () {
        System.out.println("9、Car中注册的destroy方法执行");
    }

    @PostConstruct
    public void init2 () {
        System.out.println("3、Car中JSR250中@PostConstruct注解标记的init方法");
    }

    @PreDestroy
    public void destroy3 () {
        System.out.println("7、Car中JSR250中@PreDestroy注解标记的destroy方法");
    }
}
(3)测试输出结果
image.png
(4)总结

(1)Car的构造方法执行
(2)实现BeanPostProcessor接口postProcessBeforeInitialization方法执行
(3)Car中JSR250定义的@PostConstruct注解标记的init方法执行
(4)实现InitializingBean接口的afterPropertiesSet方法执行
(5)@Bean注解中注册的init方法执行
(6)Car---postProcessAfterInitialization.
(7)Car中JSR250定义的@PreDestroy注解标记的destroy方法
(8)实现DisposableBean接口的destroy方法执行。
(9)@Bean注解中注册的destroy方法执行

优先级:
JSR250 > Spring接口方法 > @Bean中注册的初始化和销毁方法

也可以通过断点调试看Spring的执行流程,但是因为确实看得眼花,有兴趣的可以试试~~~

你可能感兴趣的:(Spring生命周期)