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

结论:构造器–>自动注入–>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接口

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值