【SpringBoot2.x-1】初始化方法汇总

SpringBoot—初始化方法大汇总

  • 1. CommandLineRunner、ApplicationRunner接口
  • 2. InitializingBean接口
  • 3. @PostConstruct接口
  • 4. init方法

结论:构造器–>自动注入–>PostConstrut–>InitializingBean–>init方法
–>CommandLineRunner接口方法

1. CommandLineRunner、ApplicationRunner接口

CommandLineRunner、ApplicationRunner接口是在容器成功启动后的最后一步回调。

在官方doc中:

在一个spring上下文中,多个CommandLineRunner可以被同时执行,并且执行顺序按照**@Order**注解的参数保持一致。

若是需要访问ApplicationArguments去代替掉字符串数组,可以考虑使用ApplicationRunner类。

//@Order(2)
@Component
public class ServerStartedReport implements CommandLineRunner{
    @Override
    public void run(String... args) throws Exception {
        System.out.println("===========ServerStartedReport启动====="+ LocalDateTime.now());
    }
}

2. InitializingBean接口

可以使用spring的InitializingBean接口的afterPropertiesSet来完成初始化。这个方法将在所有的属性被初始化后被调用。但是会在init方法前调用。

但如果是延迟加载的话,即使用**@Lazy**注解,可以让用户在首次使用的时候进行初始化。afterPropertiesSet也会在首次使用的时候进行初始化。

@Component
@Lazy
public class EventImpl implements InitializingBean {


    private String id;
    private  String name;


    @Override
    public void afterPropertiesSet() throws Exception {
        System.out.println("来了!!!=========================================================");
    }

}

3. @PostConstruct接口

如果想在生成对象之后完成某些初始化操作,而偏偏这些初始化操作又依赖于依赖注入,那么无法在构造函数中实现,为此,可以使用@PostConstruct注解一个方法来完成初始化操作。

被@PostConstruct修饰的方法会在服务器加载Servlet(bean)的时候运行,并且只会被服务器调用一次,但是注意的是,该方法会在构造方法、属性依赖注入之后,init()方法之前运行

4. init方法

在Spring中,我们将对象放入容器的方法一般有两种。

  1. 注解法,使用@Component注解等;
  2. 配置法,将bean注册到spring.xml中;

在SpringBoot中,我们可以使用**@Configuration@Bean**注解,将Bean放入到容器中。我们也可以指定init方法。初始化对象的时候,便可自动调用init方法执行。

@Configuration
public class DemoBeanConfiguration {

    @Bean(initMethod = "init",destroyMethod = "destroy")
    public DemoBean getBean(){
        DemoBean demoBean = new DemoBean();
        demoBean.setId("001");
        demoBean.setName("002");
        return demoBean;
    }
}
public class DemoBean implements InitializingBean {

    private String id;
    private  String name;

    public DemoBean() {
        System.out.println("初始化——构造方法!");
    }

    private void init(){
        System.out.println("初始化——init方法!");
    }
    private void destroy() {
        System.out.println("初始化——destroy方法!");
    }
    @Override
    public void afterPropertiesSet() throws Exception {
        System.out.println("初始化——InitializingBean接口");
    }
    @PostConstruct
    private void postConstruct(){
        System.out.println("初始化——@PostConstruct方法");
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

在容器初始化过程中便会按照如下的顺序执行初始化对象的操作。

初始化——构造方法!
初始化——@PostConstruct方法
初始化——InitializingBean接口
初始化——init方法!
---容器启动完毕后...
容器启动—CommandLineRunner接口方法!

文章参考:

CommandLineRunner或者ApplicationRunner接口

你可能感兴趣的:(SpringBoot2.x体系,spring,boot,ioc)