spring bean 初始化顺序

2021-05-16  本文已影响0人  晏雪峤_美杜莎

spring Bean初始化一般有三种:

  1. @PostConstruct 标注方法.

  2. 实现InitializingBean 接口的afterPropertiesSet 方法。

  3. @Bean 注解的initMethod 方法.

上述3中方式在同一Bean 中初始化, 那么1, 2, 3 的执行顺序如何?


代码演示:

/**
 *  Bean 初始化演示.
 */
@Configuration
public class MyBeanInitializationDemo {

    public static void main(String[] args) {
        AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext();
        applicationContext.register(MyBeanInitializationDemo.class);
        // 启动
        applicationContext.refresh();
        applicationContext.close();
    }


    @Bean(initMethod = "myDefineInitMethod")
    public Person getPerson() {
        return new Person();
    }


    public class Person implements InitializingBean {
        private int age;
        private String name;

        @PostConstruct
        public void  init() {
            System.out.println("PostConstruct init... ");
        }

        public void myDefineInitMethod() {
            System.out.println("自定义的初始化方法 init.");
        }

        @Override
        public void afterPropertiesSet() throws Exception {
            System.out.println("InitializingBean init");
        }

        @Override
        public String toString() {
            return "Person:[age:" + age + " name:" + name + "]";
        }
    }
}

执行结果:

PostConstruct init... 
InitializingBean init
自定义的初始化方法 init.

结论

  1. @PostConstructor 先初始化。
  2. InitializingBean#afterPropertiesSet 后初始化。
  3. @Bean #initMethod 最后完成初始化.
上一篇下一篇

猜你喜欢

热点阅读