标签:入门 Spring 配置 boot 第一节 springframework 组件 org SpringBoot
Spring Boot入门
一、Spring Boot简介
简化Spring应用开发的一个框架
整个Spring技术栈的一个大整合
J2EE开发的一站式解决方案
二、Spring Boot优点
创建独立Spring应用
内嵌web服务器
自动starter依赖,简化构建配置
自动配置spring以及第三方功能
提供生产级别监控,健康检查及外部化配置
无代码生成,无需编写xml
云环境天然集成
三、时代背景
1. 微服务
- 微服务是一种架构风格
- 一个应用拆分为一组小型服务
- 每个服务可以独立部署和升级
- 服务间使用轻量级HTTP交互
- 服务环绕业务功能拆分
- 可以由全自动化部署机制独立部署
- 去中心化,服务自治。服务可以使用不同语言,不同的存储技术
2. 分布式
分布式的困难
- 服务调用
- 服务发现
- 负载均衡
- 服务容错
- 配置管理
- 服务监控
- 链路追踪
- 日志管理
- 任务调度
- …
分布式解决
- Spring Boot + Spring Cloud
3. 云原生
原生应用如何上云: Cloud Native
上云困难
- 服务自愈
- 弹性伸缩
- 服务隔离
- 自动化部署
- 灰度发布
- 流量治理
四、Spring Boot开发
(1)创建maven工程
(2)引入依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.zj</groupId>
<artifactId>springboot</artifactId>
<version>1.0-SNAPSHOT</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.12.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
(3)创建主程序
package com.zj;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* 概述:主程序类
* 这是一个Spring Boot应用
* 作者:zhujie
* 创建时间:2021/11/15 12:08
*/
@SpringBootApplication
public class MyApplication {
public static void main(String[] args) {
SpringApplication.run(MyApplication.class,args);
}
}
(4)编写业务
package com.zj.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
/**
* 概述:
* 作者:zhujie
* 创建时间:2021/11/15 12:10
*/
@RestController
public class MyController {
@RequestMapping("/hello")
public String hello(){
return "Hello Spring Boot2";
}
}
(5)测试
直接运行main方法
(6)部署
引入依赖,项目打成jar包
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
五、了解自动配置原理
1.Spring Boot特点
(1)依赖管理
* 父项目做依赖管理
* 开发导入starter场景启动器
* 无需关注版本号
* 可以修改版本号
(2)自动配置
* 自动配置Tomcat
* 自动配置SpringMVC
* 自动配置Web常用功能:如字符集编码
* 默认包扫描:主程序所在的包及其所有子包下面的组件都会被扫描
* 按需加载自动配置项
2.容器功能
2.1组件添加
(1)@Configuration注解
- 标识配置类,可以和@Bean注解配合使用,添加组件
- Full与Lite模式
Full(全模式):proxyBeanMethods = true;配置类组件之间存在依赖关系,使用Full模式
Lite(轻量级模式):proxyBeanMethods = false;配置类组件之间不存在依赖关系,使用Lite模式,加速启动过程
(2)@Bean、@Component、@Controller、@Service、@Repository
(3)@ComponentScan(包扫描)、@Import(包导入)
@Import:根据类型像容器中添加组件,与Bean不同的是,组件名称为全类名,而@Bean添加的组件名为方法名
(4)@Conditional(条件装配)
条件装配:满足@Conditional条件,则进行组件注入
2.2原生配置文件引入
(1)@ImportResource:导入Spring配置文件,使其生效
2.3配置绑定
(1)@Component + @ConfigurationProperties:配置文件属性自动封装Bean,两个注解都需要添加到需要封装属性的Bean上
(2)@EnableConfigurationProperties + @ConfigurationProperties:@EnableConfigurationProperties设置开启配置绑定功能,添加到配置类上;@ConfigurationProperties添加到封装属性的Bean上
3.自动配置原理入门
3.1@SpringBootApplication(@SpringBootConfiguration+@EnableAutoConfiguration+@ComponentScan)
(1)@SpringBootConfiguration:标识当前这个类是Spring Boot核心配置类
(2)@ComponentScan:包扫描
(3)@EnableAutoConfiguration(@AutoConfigurationPackage+@Import):
-- @AutoConfigurationPackage:利用Registrar向容器导入一系列组件,导入的是主程序所在的包及其所有子包下面的所有组件
-- @Import:利用AutoConfigurationImportSelector中的getAutoConfigurationEntry方法给容器导入组件;
在getAutoConfigurationEntry方法中调用getCandidateConfigurations方法获取需要导入的组件;
利用工厂加载Map<String, List<String>> loadSpringFactories(@Nullable ClassLoader classLoader)获取所有组件;
获取的组件来源于META-INF/spring.factories位置的文件,在spring.factories文件中写死了SpringBoot启动时加载的所有自动配置类:
然后会根据Conditional的装配条件,来判断是否加载组件
标签:入门,Spring,配置,boot,第一节,springframework,组件,org,SpringBoot 来源: https://blog.csdn.net/qq_41820828/article/details/121329609
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。