SpringBoot超级详解

1.父工程的父工程

在父工程的父工程中的核心依赖,专门用来版本管理的

版本管理。

2.父工程

资源过滤问题,都帮解决了,什么配置文件,都已经配置好了,资源过滤问题是帮助,过滤解决让静态资源文件能够过滤到,类加载器的目录下,也就是编译后的目录,target

3.子工程

我们再写或者引入一些springboot依赖的时候,不需要指定版本,是因为有版本仓库帮我们选择相应的版本

3.1启动器

这就是一个启动器的依赖,说白了就是springboot的启动场景

XML 复制代码
     <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
  • 启动器:说白了就是Springboot的启动场景;
  • 比如spring-boot-starter-web,他就会帮我们自动导入web环境所有的依赖!
  • springboot会将所有的功能场景,都变成一个个的启动器;
  • 我们要使用什么功能,就只需要找到对应的启动器就可以了 `starter` !
复制代码
<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>//这是打包插件

3.2 主程序

复制代码
@SpringBootApplication 标注这个类是一个springboot的应用
复制代码
SpringApplication.run(Springboot02ConfigApplication.class, args);是一个静态方法,通过它让springboot启动,通过反射,加载Springboot02ConfigApplication这个类的对象,传入主方法参数,让springboot启动

3.2.1 注解

核心就是两个注解:

1.@SpringBootConfiguration 是 springboot的配置

@Configuration这个代表它是spring的一个配置类

@Component 这个注解代表它是一个spring组件,也就是bean对象

复制代码
2.@EnableAutoConfiguration 自动配置
@AutoConfigurationPackage自动配置包
复制代码
@Import({Registrar.class}) 导入了注册器
复制代码
AnnotationMetadata metadata  元数据
复制代码
@Import({AutoConfigurationImportSelector.class}) 导入了选择器

@import注解里面的类如果实现了ImportSelector接口,那么就会自动调用selectImports方法

选择组件,选择在pom.xml下配置了哪些东西

在选择器那个类下

获取候选的所有配置

java 复制代码
   protected List<String> getCandidateConfigurations(AnnotationMetadata metadata, AnnotationAttributes attributes) {
        List<String> configurations = new ArrayList(SpringFactoriesLoader.loadFactoryNames(this.getSpringFactoriesLoaderFactoryClass(), this.getBeanClassLoader()));
        ImportCandidates.load(AutoConfiguration.class, this.getBeanClassLoader()).forEach(configurations::add);
        Assert.notEmpty(configurations, "No auto configuration classes found in META-INF/spring.factories nor in META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports. If you are using a custom packaging, make sure that file is correct.");
        return configurations;
    }

这个注解被

复制代码
@SpringBootApplication所继承

就是做一件事情:启动类 下 的所有资源 被导入

3.2.2 META-INF/spring.factories 自动配置的核心文件

所有的资源加载到配置类中

根据条件判断要不要把这个类加载到配置中

结论:springboot所有自动配置都是在启动的时候扫描并加载:META-INF/spring.factories所有的自动配置都在这里面,但是不一定生效,要判断条件是否成立,只要导入了对应的start,,产生了对应的jar包,就有对应的启动器了,有了对应的jar包,我们自动装配就会生效,然后就配置成功!

  1. springboot在启动的时候,从类路径下META-INF/spring.factories获取指定的值;

  2. 将这些自动配置的类导入容器,自动配置就会生效,帮我进行自动配置!

  3. 以前我们需要自动配置的东西,现在springboot帮我们做了!

  4. 整合javaEE,解决方案和自动配置的东西都在spring-boot-autoconfigure-2.7.14.jar这个包下

  5. 它会把所有 生效的 需要导入的配置类组件,以类名的方式返回,这些组件就会被添加到容器

  6. 容器中也会存在许多的 XXXAutoConfiguration 的文件(@Bean),就是这些类给容器中导入了这个配置类下需要的所有组件也就是@Bean( 一个个的对象,将这些对象加载到本配置类,也就是IOC容器,相当于Spring里的一个xml文件)并自动配置,@Configuration ,javaConfig!

  7. 有了自动配置类,免去了我们手动编写配置文件的工作!!!


相关推荐
allbs1 分钟前
spring boot项目excel导出功能封装——3.图表导出
spring boot·后端·excel
帧栈6 分钟前
开发避坑指南(72):HttpHeaders 的add()方法和set()方法有什么区别?
java·spring·http
wasp52012 分钟前
Spring AI 代码分析(十)--Spring Boot集成
人工智能·spring boot·spring
unclecss20 分钟前
把 Spring Boot 的启动时间从 3 秒打到 30 毫秒,内存砍掉 80%,让 Java 在 Serverless 时代横着走
java·jvm·spring boot·serverless·graalvm
tuokuac25 分钟前
@PathVariable与@RequestParam
java·spring
q***160832 分钟前
Tomcat的server.xml配置详解
xml·java·tomcat
程序员西西32 分钟前
SpringBoot整合Apache Spark实现一个简单的数据分析功能
java·后端
n***840733 分钟前
Tomcat 乱码问题彻底解决
java·tomcat
LiLiYuan.36 分钟前
【Lombok库常用注解】
java·开发语言·python
培风图南以星河揽胜1 小时前
Java实习模拟面试|离散数学|概率论|金融英语|数据库实战|职业规划|期末冲刺|今日本科计科要闻速递:技术分享与学习指南
java·面试·概率论