学习在IDEA中使用SpringBoot(七)Spring Boot 与启动配置原理

几个重要的事件回调机制
配置在META-INF/spring.factories ApplicationContextInitializer
SpringApplicationRunListener
只需要放在ioc容器中 ApplicationRunner CommandLineRunner

启动流程:

1.创建SpringApplication对象

initialize(sources);
private void initialize(Object[] sources) {
    //保存主配置类
    if (sources != null && sources.length > 0) {
        this.sources.addAll(Arrays.asList(sources));
    }
    //判断当前是否一个web应用
    this.webEnvironment = deduceWebEnvironment();
    //从类路径下找到META-INF/spring.factories配置的所有ApplicationContextInitializer;然后保存起来
    setInitializers((Collection) getSpringFactoriesInstances(
        ApplicationContextInitializer.class));
    //从类路径下找到ETA-INF/spring.factories配置的所有ApplicationListener
    setListeners((Collection) getSpringFactoriesInstances(ApplicationListener.class));
    //从多个配置类中找到有main方法的主配置类
    this.mainApplicationClass = deduceMainApplicationClass();
}

2.运行run方法

     public ConfigurableApplicationContext run(String... args) {
       StopWatch stopWatch = new StopWatch();
       stopWatch.start();
       ConfigurableApplicationContext context = null;
       FailureAnalyzers analyzers = null;
       configureHeadlessProperty();
         
       //获取SpringApplicationRunListeners;从类路径下META-INF/spring.factories
       SpringApplicationRunListeners listeners = getRunListeners(args);
        //回调所有的获取SpringApplicationRunListener.starting()方法
       listeners.starting();
       try {
           //封装命令行参数
          ApplicationArguments applicationArguments = new DefaultApplicationArguments(
                args);
          //准备环境
          ConfigurableEnvironment environment = prepareEnvironment(listeners,
                applicationArguments);
              //创建环境完成后回调SpringApplicationRunListener.environmentPrepared();表示环境准备完成
            
          Banner printedBanner = printBanner(environment);
            
           //创建ApplicationContext;决定创建web的ioc还是普通的ioc
          context = createApplicationContext();
            
          analyzers = new FailureAnalyzers(context);
           //准备上下文环境;将environment保存到ioc中;而且applyInitializers();
           //applyInitializers():回调之前保存的所有的ApplicationContextInitializer的initialize方法
           //回调所有的SpringApplicationRunListener的contextPrepared();
           //
          prepareContext(context, environment, listeners, applicationArguments,
                printedBanner);
           //prepareContext运行完成以后回调所有的SpringApplicationRunListener的contextLoaded();
            
           //s刷新容器;ioc容器初始化(如果是web应用还会创建嵌入式的Tomcat);Spring注解版
           //扫描,创建,加载所有组件的地方;(配置类,组件,自动配置)
          refreshContext(context);
           //从ioc容器中获取所有的ApplicationRunner和CommandLineRunner进行回调
           //ApplicationRunner先回调,CommandLineRunner再回调
          afterRefresh(context, applicationArguments);
           //所有的SpringApplicationRunListener回调finished方法
          listeners.finished(context, null);
          stopWatch.stop();
          if (this.logStartupInfo) {
             new StartupInfoLogger(this.mainApplicationClass)
                   .logStarted(getApplicationLog(), stopWatch);
          }
           //整个SpringBoot应用启动完成以后返回启动的ioc容器;
          return context;
       }
       catch (Throwable ex) {
          handleRunFailure(context, listeners, analyzers, ex);
          throw new IllegalStateException(ex);
       }
    }

3.事件监听机制

  1. 配置在META-INF/spring.factories (在resources目录下创建META-INF,将spring.factoties文件放到该目录下)

    ApplicationContextInitializer

    public class HelloApplicationContextInitializer implements ApplicationContextInitializer {
    @Override
    public void initialize(ConfigurableApplicationContext applicationContext) {
    System.out.println(“ApplicationContextInitializer…initialize…”+applicationContext);
    }
    }

    SpringApplicationRunListener

    public class HelloSpringApplicationRunListener implements SpringApplicationRunListener {

     //必须有的构造器
     public HelloSpringApplicationRunListener(SpringApplication application, String[] args){
    
     }
    
     @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 finished(ConfigurableApplicationContext context, Throwable exception) {
         System.out.println("SpringApplicationRunListener...finished...");
     }
    

    }

    配置(META-INF/spring.factories)

     org.springframework.context.ApplicationContextInitializer=\
     	com.atguigu.springboot.listener.HelloApplicationContextInitializer  // 自己定义的监听器的全类名
     	 
     	org.springframework.boot.SpringApplicationRunListener=\
     	com.atguigu.springboot.listener.HelloSpringApplicationRunListener   // 自己定义的监听器的全类名
    
  2. 放IOC容器(下面几个不用再sping.factories中注册,只需要将自己定义的Runner放在ioc容器中即可)

    ApplicationRunner

         @Component
         public class HelloApplicationRunner implements ApplicationRunner {
             @Override
             public void run(ApplicationArguments args) throws Exception {
                 System.out.println("ApplicationRunner...run....");
             }
         }
    

    CommandLineRunner

     @Component
     	public class HelloCommandLineRunner implements CommandLineRunner {
     	    @Override
     	    public void run(String... args) throws Exception {
     	        System.out.println("CommandLineRunner...run..."+ Arrays.asList(args));
     	    }
     }
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
为了在idea配置spring boot,首先需要创建一个Spring Boot项目。在创建项目时,可以选择使用Spring Initializr作为项目模板。在选择项目模板的页面,需要选择Web模块以生成Spring Boot的Web应用。 接下来,需要配置项目的依赖项。可以在pom.xml文件添加需要的依赖项。例如,可以添加Spring Boot的Starter Web依赖项,这个依赖项可以让应用程序集成Tomcat服务器并启用Spring MVC框架。可以在pom.xml添加以下依赖项: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> 完成依赖项的添加后,需要配置应用程序的入口点。可以创建一个main()方法作为应用程序的入口点。在这个方法,可以使用SpringApplication.run()方法启动Spring Boot应用程序。例如,可以在示例使用以下代码: @SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } 最后,可以使用idea的自动化配置功能来配置Spring Boot应用程序的属性,例如端口号、数据库连接等。可以在application.properties或application.yml文件设置这些属性。在这些文件,可以使用以“spring.”为前缀的属性名称来设置Spring Boot应用程序的属性。 这就是在idea配置Spring Boot应用程序的基本过程。希望能够对您有所帮助!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值