SpringBootNote环境要求
环境要求
-
java8及以上 java-v
-
maven 3.3以上 mvn-v
学习资料
-
视频在B站 雷丰阳2021 SpringBoot2
SpringBoot2核心技术-基础入门
01、Spring与SpringBoot
1.1、Spring的能力
1.2、Spring的生态
覆盖了:
web开发
数据访问
安全控制
分布式
消息服务
移动开发
批处理
1.3、为什么使用SpringBoot
Spring Boot makes it easy to create stand-alone, production-grade Spring based Applications that you can "just run".
能够简单的创建出独立的,基于SpringS生产级别的应用程序,你只需Run即可
1.4、SpringBoot的优点
-
Create stand-alone Spring applications
-
-
创建独立Spring应用
-
-
Embed Tomcat, Jetty or Undertow directly (no need to deploy WAR files)
-
-
内嵌web服务器
-
-
Provide opinionated 'starter' dependencies to simplify your build configuration
-
-
自动starter依赖,简化构建配置
-
-
Automatically configure Spring and 3rd party libraries whenever possible
-
-
自动配置Spring以及第三方功能
-
-
Provide production-ready features such as metrics, health checks, and externalized configuration
-
-
提供生产级别的监控、健康检查及外部化配置
-
-
Absolutely no code generation and no requirement for XML configuration
-
-
无代码生成、无需编写XML
-
SpringBoot是整合Spring技术栈的一站式框架
SpringBoot是简化Spring技术栈的快速开发脚手架
1.5、SpringBoot的缺点
人称版本低,版本更新迭代快,需要时刻关注变化
封装太深,内部源码复杂,不容易精通
1.6、时代背景 微服务介绍
-
微服务是一种架构风格
-
一个应用拆分为一组小型服务
-
每个服务运行在自己的进程内,也就是可独立部署和升级
-
服务之间使用轻量级HTTP交互
-
服务围绕业务功能拆分
-
可以由全自动部署机制独立部署
-
去中心化,服务自治。服务可以使用不同的语言、不同的存储技术
1.7、分布式简介
分布式计算是计算机科学中一个研究方向,它研究如何把一个需要非常巨大的计算能力才能解决的问题分成许多小的部分,然后把这些部分分配给多个计算机进行处理,最后把这些计算结果综合起来得到最终的结果。分布式网络存储技术是将数据分散地存储于多台独立的机器设备上。分布式网络存储系统采用可扩展的系统结构,利用多台存储服务器分担存储负荷,利用位置服务器定位存储信息,不但解决了传统集中式存储系统中单存储服务器的瓶颈问题,还提高了系统的可靠性、可用性和扩展性。
分布式的困难
-
远程调用
-
服务发现
-
负载均衡
-
服务容错
-
配置管理
-
服务监控
-
链路追踪
-
日志管理
-
任务调度
分布式的解决
SpringBoot+SpringCloud
02、SpringBoot的入门
需求 :浏览器发送/hello 请求,获取相应为 hello SpringBoot
1.导入Maven依赖
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.3.4.RELEASE</version> </parent> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies>
2.创建主程序
注意点:主程序应在控制器代码包外一层创建
/** * 主程序类 * @SpringBootApplication:这是一个SpringBoot应用 */ @SpringBootApplication public class MainApplication { public static void main(String[] args) { SpringApplication.run(MainApplication.class,args); } }
3.编写业务
@RestController public class HelloController { @RequestMapping("/hello") public String handle01(){ return "Hello, Spring Boot 2!"; } }
4.测试
直接运行主程序的 main方法即可
SpringBoot 映入了spring-boot-starter-web 其中内置tomcat服务器 ,主程序运行时,就打开了服务器
5.简化配置
在我们资源路径下 创建 application.propertise文件
//将tomcat服务器端口号 修改成8888 server.port=8888
6.简化部署
引入Maven插件
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>
把项目打成jar包
在target下找到我们打包好的jar包,用cmd的方式运行
java -jar [jarName]
注意点 cmd的属性中 取消快速编辑模式
03、了解自动配置原理
1.父项目做依赖管理
依赖管理 <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.3.4.RELEASE</version> </parent> 他的父项目 <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>2.3.4.RELEASE</version> </parent> 几乎声明了所有开发中常用的依赖的版本号,自动版本仲裁机制
2,开发导入starter场景启动器
1、见到很多 spring-boot-starter-* : *就某种场景 2、只要引入starter,这个场景的所有常规需要的依赖我们都自动引入 3、SpringBoot所有支持的场景 https://docs.spring.io/spring-boot/docs/current/reference/html/using-spring-boot.html#using-boot-starter 4、见到的 *-spring-boot-starter: 第三方为我们提供的简化开发的场景启动器。 5、所有场景启动器最底层的依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> <version>2.3.4.RELEASE</version> <scope>compile</scope> </dependency>
3.无需关注版本号,自动版本仲裁
在Spring Boot Dependencies中声明了我们常用的版本号,当然我们也可以自行修改
-
在当前项目的pom.xml中 手动配置我们需要的版本号
4.自动配好SpringMVC
-
-
引入SpringMVC全套组件
-
自动配好SpringMVC常用组件(功能)
-
-
自动配好Web常见功能,如:字符编码问题
-
-
SpringBoot帮我们配置好了所有web开发的常见场景
-
-
默认的包结构
-
-
主程序所在包及其下面的所有子包里面的组件都会被默认扫描进来
-
无需以前的包扫描配置
-
-
-
想要改变扫描路径,@SpringBootApplication(scanBasePackages="com.atguigu")
-
-
-
-
或者@ComponentScan 指定扫描路径
-
-
@SpringBootApplication 等同于 @SpringBootConfiguration @EnableAutoConfiguration @ComponentScan("com.atguigu.boot")
-
各种配置拥有默认值
-
-
默认配置最终都是映射到某个类上,如:MultipartProperties
-
配置文件的值最终会绑定每个类上,这个类会在容器中创建对象
-
-
按需加载所有自动配置项
-
-
非常多的starter
-
引入了哪些场景这个场景的自动配置才会开启
-
-
-
SpringBoot所有的自动配置功能都在 spring-boot-autoconfigure 包里面
-
04、容器功能
1、@Configuration
-
基本使用
-
Full模式与Lite模式
-
-
示例
-
最佳实战
-
-
-
-
配置 类组件之间无依赖关系用Lite模式加速容器启动过程,减少判断
-
配置类组件之间有依赖关系,方法会被调用得到之前单实例组件,用Full模式
-
-
#############################Configuration使用示例###################################################### /** * 1、配置类里面使用@Bean标注在方法上给容器注册组件,默认也是单实例的 * 2、配置类本身也是组件 * 3、proxyBeanMethods:代理bean的方法 * Full(proxyBeanMethods = true)、【保证每个@Bean方法被调用多少次返回的组件都是单实例的】 * Lite(proxyBeanMethods = false)【每个@Bean方法被调用多少次返回的组件都是新创建的】 * 组件依赖必须使用Full模式默认。其他默认是否Lite模式 * * * */ @Configuration(proxyBeanMethods = false) //告诉SpringBoot这是一个配置类 == 配置文件 public class MyConfig { /** * Full:外部无论对配置类中的这个组件注册方法调用多少次获取的都是之前注册容器中的单实例对象 * @return */ @Bean //给容器中添加组件。以方法名作为组件的id。返回类型就是组件类型。返回的值,就是组件在容器中的实例 public User user01(){ User zhangsan = new User("zhangsan", 18); //user组件依赖了Pet组件 zhangsan.setPet(tomcatPet()); return zhangsan; } @Bean("tom") public Pet tomcatPet(){ return new Pet("tomcat"); } } ################################@Configuration测试代码如下######################################## @SpringBootConfiguration @EnableAutoConfiguration @ComponentScan("com.atguigu.boot") public class MainApplication { public static void main(String[] args) { //1、返回我们IOC容器 ConfigurableApplicationContext run = SpringApplication.run(MainApplication.class, args); //2、查看容器里面的组件 String[] names = run.getBeanDefinitionNames(); for (String name : names) { System.out.println(name); } //3、从容器中获取组件 Pet tom01 = run.getBean("tom", Pet.class); Pet tom02 = run.getBean("tom", Pet.class); System.out.println("组件:"+(tom01 == tom02)); //4、com.atguigu.boot.config.MyConfig$$EnhancerBySpringCGLIB$$51f1e1ca@1654a892 MyConfig bean = run.getBean(MyConfig.class); System.out.println(bean); //如果@Configuration(proxyBeanMethods = true)代理对象调用方法。SpringBoot总会检查这个组件是否在容器中有。 //保持组件单实例 User user = bean.user01(); User user1 = bean.user01(); System.out.println(user == user1); User user01 = run.getBean("user01", User.class); Pet tom = run.getBean("tom", Pet.class); System.out.println("用户的宠物:"+(user01.getPet() == tom)); } }
2、@Bean、@Component、@Controller、@Service、@Repository
同样适用
04、开发小技巧
1.使用Lombok
简化JavaBean开发 SpringBoot为我们提供了Lombok依赖,并需要我们在pom.xml中导入
<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency> idea中搜索安装lombok插件
===============================简化JavaBean开发=================================== @NoArgsConstructor //@AllArgsConstructor @Data @ToString @EqualsAndHashCode public class User { private String name; private Integer age; private Pet pet; public User(String name,Integer age){ this.name = name; this.age = age; } } ================================简化日志开发=================================== @Slf4j @RestController public class HelloController { @RequestMapping("/hello") public String handle01(@RequestParam("name") String name){ log.info("请求进来了...."); return "Hello, Spring Boot 2!"+"你好:"+name; } }
2.使用dev-tools
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</optional> </dependency>
项目修改或者页面修改之后CTRL+F9
3.Spring Initailizr(项目初始化向导)
1.选择我们所需要的场景
2.自动依赖引入
3.自动创建项目结构
4.自动编制好主配置类
核心功能
笔记记于尚硅谷SpringBoot视频,目前只记到了基础入门,核心功能后续完善。
雷丰阳2021版SpringBoot2零基础入门springboot全套完整版(spring boot2)_哔哩哔哩_bilibili