SpringBoot开发【入门】HelloWorld探究

本文深入探究了SpringBoot HelloWorld的实现,包括POM文件中的父项目管理和依赖导入,特别是spring-boot-starter的场景启动器功能。同时,详细阐述了主程序类中的@SpringBootApplication注解以及@EnableAutoConfiguration开启的自动配置功能,解析了自动配置的工作原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

上一章讲了如何用SpringBoot实现一个HelloWorld功能,下面让我们来探究一下具体过程

POM文件

1.父项目

   <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.1.RELEASE</version>
    </parent>

父项目的作用是用来做依赖管理
我们按住Ctrl,点击spring-boot-starter-parent,就会进入这个父项目的父项目
父项目的父项目
我们会发现里面也有一个父项目

<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-dependencies</artifactId>
		<version>1.5.1.RELEASE</version>
		<relativePath>../../spring-boot-dependencies</relativePath>
	</parent>

我们点spring-boot-dependencies进去看一看
往下翻,在标签下,包含着各种各样个版本的依赖
父项目中的依赖总结一下,这个父项目是用来管理SpringBoot应用里面所有依赖版本的,也可以称为SpringBoot的版本仲裁中心
在以后我们导入依赖默认是不需要写版本的( 在没有dependencies里面管理的依赖需要声明版本号)
2.导入的依赖
在上一章刚开始,我们导入了一个依赖

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>

这里给大家做一个名词解释
spring-boot-starter:场景启动器
我们先进入spring-boot-starter-web,我们可以看到web所需要的各种 dependencies
web需要的各种依赖总结一下,当我们使用web模块地时候,场景启动器帮我们导入web模块正常运行所依赖的组件
在SpringBoot官方文档中,有各种模块的启动器
官方文档地址
官方文档SpringBoot将所有的功能场景都抽取出来,做成一个个的starter(启动器),只需要在项目里引入这些starter,相关场景的所有依赖都会自动导入进来,要用什么功能,就导入相应的场景启动器就行

主程序类,主入口类

@SpringBootApplication   //主程序是一个SpringBoot应用
public class MainApplication {
    public static void main(String[] args) {

        SpringApplication.run(MainApplication.class,args); //使Spring运行
    }
}

主程序中有一个关键注解
@SpringBootApplication:SpringBoot应用标注在某个类上说明这个类是SpringBoot的主配置类, SpringBoot就应该运行这个类的main方法来启动SpringBoot应用
我们点进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}
)}
)
public @interface SpringBootApplication {

1.SpringBootConfiguration: SpringBoot的配置类;标注在某个类,表示这是一个SpringBoot的配置类
我们点进去,会发现有一个@Configuration的注解
@Configuration:配置类上来标注这个注解
配置类也是容器中的一个组件;@Component

2.@EnableAutoConfiguration:开启自动配置功能
以前我们需要配置的东西,SpringBoot帮我们自动配置:@EnableAutoConfiguration告诉SpringBoot开启自动配置功能

@AutoConfigurationPackage
@Import({EnableAutoConfigurationImportSelector.class})
public @interface EnableAutoConfiguration {

@AutoConfigurationPackage:自动配置包
在文件里@Import({EnableAutoConfigurationImportSelector.class}) 属于Spring的底层注解,给容器中导入一个组件(以全类名的方式返回),导入的组件由EnableAutoConfigurationImportSelector.class决定,会给容器导入非常多的自动配置类(xxxAutoConfiguration),就是给容器中导入这个场景需要的所有组件,并配置好这些组件

将主配置类(SpringBootApplication标注的类)的所在包及下面所有组件扫描到Spring容器

我们进入AutoConfigurationImportSelector,会发现一个方法
SpringFactoriesLoader.loadFactoryNames(EnautoConfiguration.class,classLoader)
SpringFactoriesLoader.loadFactoryNames方法
作用是从类路径下的META-INF/spring.factories中获取EnableAutoConfiguation指定的值,将这些值作为自动配置类导入到容器中,自动配置类就生效,帮我们进行自动配置工作

J2EE的整体解决方案和自动配置都在spring-boot-autoconfigure的jar包中

有了自动配置类,就免去了手动编写配置注入功能组件等工作

以上就是关于HelloWorld的功能实现解析了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值