springBoot工作原理

1. SpringBoot 概述


        SpringBoot 是Spring的一套快速配置脚手架,快速的将一些常用的第三方依赖整合(原理:通过Maven子父工程的方式),简化xml配置,全部采用注解形式,内嵌web应用容器(如:jetty和Tomcat),最终以java应用程序进行执行

2. SpringBoot的启动类入口

@SpringBootApplication
public class SpringBootDya1Application {

    public static void main(String[] args) {

        SpringApplication.run(SpringBootDya1Application.class, args);
    }

}

2.1@SpringBootApplication是一个复合注解

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(
    excludeFilters = {@Filter(
    type = FilterType.CUSTOM,
    classes = {TypeExcludeFilter.class}
), @Filter(
    type = FilterType.CUSTOM,
    classes = {AutoConfigurationExcludeFilter.class}
)}
)

- @Target({ElementType.TYPE}):指定注解的使用范围为类级别。
- @Retention(RetentionPolicy.RUNTIME):指定注解在运行时仍然可用。
- @Documented:指定注解将包含在Java文档中。
- @Inherited:指定注解可以被子类继承。
- @SpringBootConfiguration:指定该类是Spring Boot应用程序的配置类。
- @EnableAutoConfiguration:启用Spring Boot的自动配置机制,根据类路径下的jar包和注解自动配置Spring应用程序。
- @ComponentScan:扫描指定包及其子包中的组件,包括@Service、@Repository、@Controller和@Component等。
- excludeFilters:指定要排除的组件,可以使用TypeExcludeFilter和AutoConfigurationExcludeFilter等。

3. @EnableAutoConfiguration

3.1.@EnableAutoConfiguration:自动装配包

  1.      @EnableAutoConfiguration注解是Spring Boot框架中的一个核心注解之一。它的作用是启用Spring Boot的自动配置机制。当我们使用@EnableAutoConfiguration注解时,Spring Boot会根据项目的依赖和配置,自动配置和装配Spring应用程序所需的各种组件和功能。
  2.      这个注解的工作原理是通过扫描项目的类路径,根据类路径下的jar包和注解来判断需要自动配置哪些组件。Spring Boot会根据一系列的条件和规则,自动加载和配置相关的Bean、服务、数据库连接、消息队列等等。这样,我们就不需要手动编写大量的配置代码,Spring Boot会根据约定大于配置的原则,自动完成这些配置工作。
  3.         @EnableAutoConfiguration注解通常与@SpringBootConfiguration注解一起使用,后者用于标识配置类。在一个Spring Boot应用程序中,我们通常会创建一个主配置类,使用@SpringBootConfiguration注解进行标识,并在该类上添加@EnableAutoConfiguration注解,以启用自动配置机制。
  4.         需要注意的是,自动配置并不是万能的,有时候我们仍然需要手动进行一些配置。在某些情况下,我们可能需要通过自定义配置类或属性文件来覆盖或扩展自动配置的行为。但总体来说,@EnableAutoConfiguration注解为我们提供了便捷的方式来快速构建和配置Spring Boot应用程序。

3.2.@Import(AutoConfigurationPackages.Registrar.class)

  1. @Import(AutoConfigurationPackages.Registrar.class)注解是Spring Boot框架中的一个注解,用于将AutoConfigurationPackages.Registrar类导入到当前配置类中。
  2. AutoConfigurationPackages.Registrar类是Spring Boot框架中的一个内部类,它会自动扫描和注册当前应用程序中所有的自动配置包。这些自动配置包通常包含了一些Spring Boot应用程序所需的常用组件和功能,例如Web、数据访问、安全等。
  3. 通过在配置类中导入AutoConfigurationPackages.Registrar类,我们可以确保自动配置包被正确地扫描和注册,从而让Spring Boot应用程序能够自动配置和装配这些组件和功能。
  4. 需要注意的是,@Import注解可以用于导入任何一个类或者一组类,但是在Spring Boot应用程序中,通常将AutoConfigurationPackages.Registrar类作为@Import注解的参数,以确保自动配置包的正确扫描和注册。

3.3.@Import(AuroConfigurationImportSelector.class)

  1. @Import(AutoConfigurationImportSelector.class)注解是Spring Boot框架中的一个注解,用于导入AutoConfigurationImportSelector类到当前配置类中。
  2. AutoConfigurationImportSelector类是Spring Boot框架中的一个关键类,它用于选择和导入自动配置类。自动配置类是Spring Boot自动配置机制的核心,它包含了一系列的配置和装配逻辑,用于自动配置Spring Boot应用程序所需的各种组件和功能。
  3. 通过在配置类中使用@Import注解,并将AutoConfigurationImportSelector类作为参数,我们可以让Spring Boot自动加载和导入所有的自动配置类。AutoConfigurationImportSelector类会根据类路径、配置和条件等信息,选择合适的自动配置类,并将其导入到当前配置类中。
  4. 这样,我们就可以方便地使用Spring Boot的自动配置机制,让Spring Boot根据项目的依赖和配置,自动配置和装配所需的组件和功能,减少了手动配置的工作量。

 3.4 SpringFactoriesLoader概述

  1. SpringFactoriesLoader是Spring框架中的一个工具类,用于加载和获取在META-INF/spring.factories文件中定义的工厂类。它提供了一种机制,让开发人员能够方便地扩展和定制Spring框架的功能。
  2. 在META-INF/spring.factories文件中,可以定义多个工厂类及其对应的实现类。这些工厂类通常用于创建和提供Spring框架中的各种扩展点,例如BeanPostProcessor、BeanFactoryPostProcessor、ApplicationContextInitializer等。通过使用SpringFactoriesLoader,我们可以轻松地加载和使用这些工厂类。
  3. SpringFactoriesLoader提供了多个静态方法,用于加载和获取工厂类。例如,可以使用SpringFactoriesLoader.loadFactories()方法加载所有的工厂类,并返回一个Map,其中键是工厂类的全限定名,值是对应的实现类列表。还可以使用SpringFactoriesLoader.loadFactoryNames()方法,仅返回工厂类的全限定名列表。
  4. 通过使用SpringFactoriesLoader,我们可以在Spring框架中实现可插拔的扩展机制。我们可以编写自定义的工厂类,并在META-INF/spring.factories文件中进行配置,然后通过SpringFactoriesLoader加载并使用这些扩展点。这样,我们可以灵活地扩展和定制Spring框架的功能,满足特定的业务需求。

3.5 自动装配过程 

1. 扫描组件:Spring会扫描指定包及其子包中的所有类,查找带有特定注解(如@Component、@Service、@Repository等)的类。

2. 创建实例:对于扫描到的类,Spring会创建相应的实例,并将其纳入Spring容器管理。

3. 解析依赖:Spring会分析实例中的依赖关系,并根据依赖关系自动查找并注入所需的依赖对象。这可以通过构造函数注入、Setter方法注入或字段注入来实现。

4. 处理特殊注解:Spring会处理一些特殊的注解,如@Qualifier、@Primary、@Autowired等,用于解决多个候选对象的自动装配冲突或指定特定的装配规则。

5. 完成装配:当所有的依赖关系都被解析和注入后,自动装配过程就完成了。此时,Spring容器中的组件已经完成了自动装配,可以被其他组件使用。 自动装配的好处是可以大大简化Spring应用程序的配置工作,减少了手动配置的代码量。它可以根据约定大于配置的原则,自动完成组件的装配,提高开发效率。同时,自动装配也提高了代码的可维护性和可扩展性,使得系统更加灵活和易于演化。

需要注意的是,虽然自动装配可以大大简化配置工作,但在某些情况下,我们仍然需要手动进行一些配置,特别是对于一些复杂的依赖关系或特殊的配置需求。在这种情况下,我们可以通过显示地使用注解或配置文件来进行手动 

4. SpringBoot原理图

5. SpringApplication执行流程 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值