SpringBoot原理初探以及第一个SpringBoot程序SpringBoot

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringBoot原理初探以及第一个SpringBoot程序SpringBoot相关的知识,希望对你有一定的参考价值。

一.SpringBoot

1.1 Spring和SpringBoot

Spring:Spring是一个开源框架, 2003年兴起的一个轻量级的Java开发框架, 作者:Rod Johnson Spring是为了解决企业级应用开发的复杂性而创建的, 简化开发。

Spring Boot

SpringBoot最核心的东西:自动装配。

1.2 本阶段学习任务

1.3 微服务架构

微服务就是一些协同工作小而自治的服务。

与传统的单一软件架构不同,微服务架构是为满足当前互联网后台服务的“高并发、高性能、高可用性三高要求”而创建的软件架构。

二.搭建一个SpringBoot程序

环境:

SpringBoot官方网站:

2.1 新建SpringBoot项目(官方)

1.在官方网站里点击进入Spring Initializr.

2.project选择Maven,语言选择java

版本选择最新的2.7.5,Java选择8,在右边将Springweb添加进去,点击下载,就会得到一个标准的Maven项目。

3.使用idea打开这个项目即可:

2.2 正常创建SpringBoot项目

1.直接在idea里创建一个Spring项目即可,如下配置

2.添加依赖Spring Web

总结:俩种创建方式1.在SpringBoot官网下载后,导入idea开发。2.可以直接在idea里创建项目进行开发。

2.3 项目结构

SpringbootDemoApplication为项目的主入口。

application.properties是项目的核心配置文件。

2.4 启动项目

运行主入口:就会启动项目

public class SpringbootDemoApplication 

    public static void main(String[] args) 
        SpringApplication.run(SpringbootDemoApplication.class, args);
    


访问本地8080端口:

说明项目搭建成功。

2.5 写一个接口HelloControlier

这个接口,接口就是hello。调用业务,接受前端的参数

@RestController
public class HelloControlier 
    @RequestMapping("/hello")
    public String hello()
        return "hello,world上进小菜猪";
    


所以我们访问http://localhost:8080/hello,就会进入这个接口。

返回如下:

原理:自动装配!

2.6 原理

依赖:这里配置web依赖,比如tomact,dispatcherServlet,xml等等:

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

单元测试:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
</dependency>

打jar包依赖:

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

2.7 更改配置

到application.properties里,写端口号:

server.port=8081

重新启动项目:发现现在的端口号变成了8081!

三.原理初探

自动配置原理

在文件里的pom.xml里:

1.核心依赖都在父工程里。

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.7.5</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>

2.启动器

就是一个Springboot的启动场景,像下面的spring-boot-starter-web,会帮我们自动的导入web环境的所有依赖。

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

3.项目入口文件SpringbootDemoApplication

SpringApplication类

run方法

public static void main(String[] args) 
        SpringApplication.run(SpringbootDemoApplication.class, args);
    

SpringApplication

这个类做了下面4个事情:

1.推断应用的类型是普通的项目还是Web项目

2.查找并加载所有可用初始化器,设置到initializers属性中中

3.找出所有的应用程序监听器,设置到listeners属性中

4.推断并设置main方法的定义类,找到运行的主类

@SpringBootApplication标注这个类是一个springboot的应用

点进去查看源码:

@SpringBootConfiguration:springboot的配置

  • @Configuration :spring 配置类
    • @Component:也是一个组件类

@EnableAutoConfiguration:自动配置

  • @AutoConfigurationPackage:自动配置包
    • @Import(AutoConfigurationPackages.Registrar.class):自动配置“包注册”
    • @Import(AutoConfigurationImportSelector.class)自动配置导入选择

获取所有的配置:

List<String> configurations = this.getCandidateConfigurations(annotationMetadata, attributes);

获取候选的配置:核心代码

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;

对于SpringBoot的理解,俩点:

1.自动装配

2.run()方法

以上是关于SpringBoot原理初探以及第一个SpringBoot程序SpringBoot的主要内容,如果未能解决你的问题,请参考以下文章

spring boot中的底层配置文件application.yam(application.property)的装配原理初探

SpringBoot运行原理初探—自动装配

初探 Spring Boot

SpringBoot之旅第一篇-初探

Spring从入门到实战第 5 讲:SpringBoot 实现拦截器及其原理

SpringBoot的自动装配原理