SpringBoot原理解析

1. 什么是SpringBoot?

SpringBoot是一个快速开发框架,快速的将一些常用的第三方依赖整合(原理:通过Maven子父工程的方式),简化XML配置,全部采用注解形式,内置Http服务器(Jetty和Tomcat),最终以java应用程序进行执行

 2.为什么使用SpringBoot

Spring Boot是一种 基于Spring框架的快速开发应用程序的工具。以下是使用
Spring Boot的一些好处: 
        快速开发: Spring Boot提供了一系列的自动配置,使得开发者不必从零开
始配置Spring应用程序,从而可以快速地构建应用程序。
        简化配置: Spring Boot可以通过各种自动配置来简化应用程序的配置,开
发者不必手动配置和管理各种依赖关系。
        微服务支持: Spring Boot对微服务的支持很好,可以使用Spring Cloud构建
复杂的微服务体系结构。
        生态系统支持: Spring Boot受到广泛的支持,有很多插件和工具可以与其
集成,以便更好地支持开发人员。
        易于维护:,SpringBoot代码的可读性和可维护性很高,这使得应用程序的
维护变得容易。
总之,Spring Boot通过简化应用程序的开发和部署,提高了开发人员的工作效
率,并降低了应用程序的维护成本。

3.Spring Boot的核心注解是哪个?它主要由哪几个注解组成的

Spring Boot的核心注解是@SpringBootApplication. 

@SpringBootApplication是一个组合注解,由以下三个注解组成:

        @Configuration:表明该类是一个Spring配置类

        @EnableAutoConfiguration:启用Spring Boot的自动配置机制。

        @ComponentScan:告诉Spring 扫描哪些包来查找注解的组件,如控制器、服务等。

这三个注解的组合提供了基本的SpringBoot应用程序配置,以及启用自动配置
和组件扫描。除此之外,Spring Boot还有很多其他的注解,如
@RestController. @Service、 @Repository 等,用于指定特定类型的组件

4.设置应用类型

应用类型分为三种,都在WebApplicationType这个枚举类中,如下:

1. NONE :顾名思义,什么都没有,正常流程走,不额外的启动web容器,比如Tomcat
2. SERVLET :基紆servlet的web程序,需要启动内嵌的servlet web容器,比如Tomcat
3. REACTIVE :基纡reactive的web程序,要启动内嵌reactive web容器

判断的依据很简单,就是加载对应的类,比如加载了DispatcherServlet等则会判断是Servlet的web程序。源码如下:

    static WebApplicationType deduceFromClasspath() {
        if (ClassUtils.isPresent("org.springframework.web.reactive.DispatcherHandler", (ClassLoader)null) && !ClassUtils.isPresent("org.springframework.web.servlet.DispatcherServlet", (ClassLoader)null) && !ClassUtils.isPresent("org.glassfish.jersey.servlet.ServletContainer", (ClassLoader)null)) {
            return REACTIVE;
        } else {
            String[] var0 = SERVLET_INDICATOR_CLASSES;
            int var1 = var0.length;

            for(int var2 = 0; var2 < var1; ++var2) {
                String className = var0[var2];
                if (!ClassUtils.isPresent(className, (ClassLoader)null)) {
                    return NONE;
                }
            }

            return SERVLET;
        }
    }

5.设置初始化器(Initializer)

初始化器ApplicationContextInitializer 是个好东西,用于IoC容器刷新之前初始化一些组
件,比如ServletContextApplicationContextInitializer

private <T> Collection<T> getSpringFactoriesInstances(Class<T> type, Class<?>[] parameterTypes, Object... args) {
        ClassLoader classLoader = this.getClassLoader();
        Set<String> names = new LinkedHashSet(SpringFactoriesLoader.loadFactoryNames(type, classLoader));
        List<T> instances = this.createSpringFactoriesInstances(type, parameterTypes, classLoader, args, names);
        AnnotationAwareOrderComparator.sort(instances);
        return instances;
    }

相对重要的就是第一步获取初始化器的名称了, 这个肯定是全类名了,详细源码肯定在
 loadFactoryNames()方法中了,跟着源码进入,终调用的是#SpringFactoriesloader . loadSspringFactories()方法。


loadSpringFactories()方法就不再详细解释了,实就是从类路径META-INF/spring. factories中加载ApplicationContextInitializer的值。

6.监听器

在sping B0,监视器(Monitor) 是指一组用于监 视应用程序运行时状态的工具和组件。
Spring Boot中的监视器包括以下几个方面:
        Actuator: Actuator 是Sprig Boot的- 个功能模块,它提供了一系列用于监
视和管理Spring Boot应用程序的端点(Endpoints) ,包括健康检查、度量指
标、配置信息、日志等。可以通过HTTP或JMX等多种方式访问这些端点,获
取应用程序的状态信息和运行时指标。
        Spring Boot Admin: Spring Boot Admin是一个针对Spring Boot应用程序的
监视和管理工具,它基于Actuator端点提供了可视化的Web界面,可以实时查
看应用程序的状态信息、监控指标和日志,还支持在线查看和修改配置、热部
署和远程调试等功能。
        Logging: Spring Boot集成了Logback、 Log4j2 等多个日志框架,可以通过配
置文件或代码的方式对日志进行管理和监控,例如设置日志级别、输出格式、
文件位置等。另外,Spring Boot还提供了一些日志相关的Actuator端点,可以
动态修改日志级别、查看日志内容等。

总结

SpringApplication的构建都是为了run()方法启动做铺垫,构造方法中总共就有几行代码,最重要的部分就是设置应用类型、设置初始化器、设置监听器。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值