SpringBoot事件监听机制之配置

1、SpringBoot启动配置原理 (我们之后的文章中有细讲)

2、根据上面的配置原理,配置我们自己的实现类

(1)HelloApplicationContextInitializer

package com.dhu.listener;

import org.springframework.context.ApplicationContextInitializer;
import org.springframework.context.ConfigurableApplicationContext;

/**
 * @author zhou
 * @create 2020/5/30
 */
public class HelloApplicationContextInitializer implements ApplicationContextInitializer<ConfigurableApplicationContext> {
    @Override
    public void initialize(ConfigurableApplicationContext applicationContext) { //applicationContext : ioc
        System.out.println("ApplicationContextInitializer...initialize" + applicationContext);
    }
}

(2)HelloSpringApplicationRunListener

package com.dhu.listener;

import org.springframework.boot.SpringApplicationRunListener;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.core.env.ConfigurableEnvironment;

/**
 * @author zhou
 * @create 2020/5/30
 */
public class HelloSpringApplicationRunListener implements SpringApplicationRunListener {
    @Override
    public void starting() {
        System.out.println("SpringApplicationRunListener...starting");
    }

    @Override
    public void environmentPrepared(ConfigurableEnvironment environment) {
        Object o = environment.getSystemProperties().get("os.name");
        System.out.println("SpringApplicationRunListener...environmentPrepared" + o);
    }

    @Override
    public void contextPrepared(ConfigurableApplicationContext context) {
        System.out.println("SpringApplicationRunListener...contextPrepared");
    }

    @Override
    public void contextLoaded(ConfigurableApplicationContext context) {
        System.out.println("SpringApplicationRunListener...contextLoaded");
    }

    @Override
    public void started(ConfigurableApplicationContext context) {
        System.out.println("SpringApplicationRunListener...started");
    }
}

(3)HelloApplicationRunner

package com.dhu.listener;

import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.stereotype.Component;

/**
 * @author zhou
 * @create 2020/5/30
 */
@Component //需要放入ioc容器
public class HelloApplicationRunner implements ApplicationRunner {
    @Override
    public void run(ApplicationArguments args) throws Exception {
        System.out.println("ApplicationRunner...run");
    }
}

(4)HelloCommandLineRunner

package com.dhu.listener;

import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;

import java.util.Arrays;

/**
 * @author zhou
 * @create 2020/5/30
 */
@Component //需要放入ioc容器
public class HelloCommandLineRunner implements CommandLineRunner {
    @Override
    public void run(String... args) throws Exception {
        System.out.println("CommandLineRunner...run" + Arrays.asList(args));
    }
}

3、启动主配置类

(1)第一次启动报错:

NoSuchMethodException:

错误排查:

提示:

getConstructor0 : 跟构造器有关

<init>:初始化有关,初始化的时候需要传入(org.springframework.boot.SpringApplication, [Ljava.lang.String;)这两个参数

SpringApplicationRunListener在启动的时候报错,错误的原因是:我们没有给出规定的有参构造器。

解决:

我们可以参照:它写好的实现类 EventPublishingRunListener

EventPublishingRunListener 只有一个有参构造器:

跟我们的错误提示符合

 

(2)HelloSpringApplicationRunListener 提供有参构造器:

public class HelloSpringApplicationRunListener implements SpringApplicationRunListener {

    //提供有参构造器
    public HelloSpringApplicationRunListener(SpringApplication application, String[] args) {

    }

 (3)再次启动运行

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值