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)再次启动运行