1、SpringBoot 基础入门

该栏目会系统的介绍SpringBoot的知识体系,共分为基础部分、源代码和综合实例等模块



SpringBoot 简介

1、概述

  • :是一个整合 Spring 技术栈的一站式框架,也是快速创建 Spring 应用的脚手架

2、特点

  • 快速创建 Spring 应用
  • 使用嵌入式的 Servlet 容器,无需打包成War包
  • 自动 starter 依赖,简化构建配置
  • 提供生产环境中应用监控,健康检查及外部配置

3、集群、分页式和微服务

  • 集群:同一个业务布置在多台服务器上,是一种物理形态
  • 分页式:同一个业务拆分成多个子业务,部署在不同服务上,是一种工作方式
  • 微服务:将模板拆分成一个个独立的服务,服务间通过接口实现数据交互,可以部署在同一服务器,也可以部署在多个服务上。

SpringBoot 基础

1、创建 SpringBoot 项目

  • 配置maven
<!--打开maven中的settings.xml-->
<!--配置阿里云镜像-->
<mirrors>
	<mirror>
        <id>nexus-aliyun</id>
        <mirrorOf>central</mirrorOf>
        <name>Nexus aliyun</name>
        <url>http://maven.aliyun.com/nexus/content/groups/public</url>
    </mirror>
</mirrors>
 
<!--让maven使用jdk1.8进行项目编译-->
<profiles>
    <profile>
        <id>jdk-1.8</id>
        <activation>
            <activeByDefault>true</activeByDefault>
            <jdk>1.8</jdk>
        </activation>
        <properties>
            <maven.compiler.source>1.8</maven.compiler.source>
            <maven.compiler.target>1.8</maven.compiler.target>
            <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
        </properties>
    </profile>
</profiles>

<!--添加maven插件,可以让项目打包成jar包-->
<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>
  • 导入相关依赖
<!--导入父工程-->
<parent>
	<groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.3.4.RELEASE</version>
</parent>

<dependencies>
    <!--导入web场景启动器-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies>
  • 编写主程序类
@SpringBootApplication
public class MainApplication {

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

}
  • 编写控制器类
@RestController
public class HelloController {

    @GetMapping("/hello")
    public String hello() {
        return "Hello,Spring Boot!";
    }

}
  • 配置文件(application.yml)
server:
  port: 8888

2、依赖管理

  • 概述:父项目用于做依赖管理,让开发时导入 starter 场景启动器无需关注版本号,自动版本仲裁,也可以按需可以修改版本号
  • 图示
Created with Raphaël 2.2.0 开始 任意starter spring-boot-starter-parent spring-boot-dependencies 结束
  • 配置说明
<!--该项目的父项目-->
<!--用于做依赖管理,无需关注版本号,自动版本仲裁-->
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.3.4.RELEASE</version>
</parent>

<!--可以修改版本号-->
<properties>
    <mysql.version>5.4.3</mysql.version>
</properties>

<!--starter场景启动器:该场景下所有相关的依赖-->
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies>

<!--父项目的父项目:底层依赖,声明了开发中常用的依赖的版本-->
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-dependencies</artifactId>
    <version>2.3.4.RELEASE</version>
</parent>

3、自动配置

  • 概述:项目启动时对一些相关注解的类,自动注入到 Spring 容器中
  • 流程:启动类中标记了 @SpringBootApplication 注解,该注解下面标识了 @EnableAutoConfiguration 注解,该注解用于启动自动配置,在该注解下标记了 @Import(AutoConfigurationImportSelector.class) ,该类中的 selectImport() 方法中主要加载了 META-INF/spring.factorie 中配置的127个场景启动器类的全类名
  • 引导加载自动配置类
@SpringBootApplication
public class MainApplication {

}

@SpringBootApplication分析///

@SpringBootConfiguration       // 代表MainApplication是一个配置类 
@ComponentScan(excludeFilters = {
   @Filter(type = FilterType.CUSTOM,classes = {TypeExcludeFilter.class}), 
   @Filter(type = FilterType.CUSTOM,classes = {AutoConfigurationExcludeFilter.class})
})  // 组件扫描
@EnableAutoConfiguration
public @interface SpringBootApplication {
    
}

@EnableAutoConfiguration分析///

@AutoConfigurationPackage   // 利用Registrar类,将指定一个包(MainApplication所在的包下)
                            // 下的所有组件导入
@Import({AutoConfigurationImportSelector.class}) // 自动装配
public @interface EnableAutoConfiguration {
    
}

AutoConfigurationImportSelector分析///
// 获取自动配置实例
跳转到 => selectImports(){ ... }
	// 给容器导入一些组件
	点击进入 => this.getAutoConfigurationEntry(annotationMetadata);  
		// 获取一些后选配置
		点击进入 => this.getCandidateConfigurations(annotationMetadata, attributes);
			// 使用Spring工厂加载器加载
			点击进入 => SpringFactoriesLoader.loadSpringFactories(classLoader);
				// 从META-INF/spring.factorie加载其127个场景全部加载,
				// 但最终会按照条件装配规则
				点击进入 => classLoader.getResources("META-INF/spring.factories")  
  • 按需加载自动配置项:虽然我们127个场景的所有自动配置启动的时候默认全部加载。 xxxxAutoConfiguration 按照条件装配规则(@Conditional),最终会按需配置
  • 定制化修改自动配置:SpringBoot 默认会在底层配好所有的组件。但是如果用户自己配置了以用户的优先

4、容器功能

注解功能
@Configuration告诉SpringBoot这是一个配置类(类似于以前的bean.xml),配置类本身也是组件
@Import在容器中的组件中才能使用,用于给容器自动创建出这些类型的组件
@ImportResource用于导入Spring配置文件
@ComponentScan包扫描
@Conditional条件装配,用于指定条件,当满足条件时才进行组件注入
@Bean向容器中添加组件
@Component向容器中添加组件
@Controller向容器中添加组件
@Service向容器中添加组件
@Repository向容器中添加组件
// 告诉SpringBoot这是一个配置类,配置类本身也是组件
// @Configuration(proxyBeanMethods = true),当代理对象调用方法为true时,为Full全模式,
// 该模式总是从容器获取之前的对象(单实例),否则,为Lite轻量级模式
@Configuration(proxyBeanMethods = true)
// 在容器中的组件中才能使用@Import,用于给容器自动创建出这些类型的组件,默认组件名称是全类名
@Import({Pet.class,DBHelper.class})
// 用于导入Spring配置文件
@ImportResource("classpath:bean.xml")
public class className{
    
	// 向容器添加组件,以方法名作为组件的Id,返回类型即组件类型,返回的值,就是组件在容器中的实例
    @Bean 
    // 条件装配,用于指定条件,当满足条件时才进行组件注入
	@ConditionalOnBean(name = "pet") // 当容器中有pet组件时才注入User,
					     // 注解在方法中只对该方法注入组件有用,如果注解在类中则对所有的组件有用
    public User user(){
        return new User();
    }
    
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值