SpringBoot狂神说视频自整理笔记前半篇
本片文章均为观看狂神说java中springboot视频整理的笔记,仅作为学习用途!
1、SpringBoot:快速入门
1.1、什么是Spring
Spring是一个开源框架,2003年兴起的一个轻量级的Java开发框架,作者:Rod Johnson
Spring是为了解决企业级应用开发的复杂性而创建的,简化开发
1.2、Spring是如何简化Java开发的
为了降低Java开发的复杂性,Spring采用了以下4种关键策略:
- 基于POJO的轻量级和最小侵入性编程
- 通过IOC,依赖注入(DI)和面向接口实现松耦合
- 基于切面(AOP)和惯例进行声明式编程
- 通过切面和模板减少样式代码
1.3、什么是SpringBoot
SpringBoot就是一个javaweb的开发框架,和SpringMVC类似,对比其他javaweb框架的好处,官方说是简化开发,约定大于配置,you can “just run”,能迅速的开发web应用,几行代码开发一个http接口
所有的技术框架的发展似乎都遵循了一条主线规律:从一个复杂的应用场景 衍生 一种规范框架,人们只需要进行各种配置而不需要自己去实现它,这时候强大的配置功能成了优点;发展到一定程度之后,人们根据实际生产应用情况,选取其中实用功能和设计精华,重构出一些轻量级的框架;之后为了提高开发效率,嫌弃原先的各类配置过与麻烦,于是开始提倡"约定大于配置",进而衍生出一些一站式的解决方案
是的 这就是Java企业级应用 → J2EE → spring → springboot的过程
随着spring不断的发展,涉及的领域越来越多,项目整合开发需要配合各种各样的文件,慢慢变得不那么易用简单,违背了最初的理念,甚至人称配置低于。springboot正是在这样的一个背景下被抽象出来的开发框架,目的为了让大家更容易的使用Spring,更容易的集成各种常用的中间件、开源软件
Spring Boot基于Spring开发,Spring Boot本身并不提供Spring框架的核心特性以及扩展功能,只是用于快速、敏捷的开发新一代基于Spring框架的应用程序。也就是说,它并不是用来替代Spring的解决方案,而是和Spring框架紧密结合用于提升Spring开发者体验的工具。SpringBoot以约定大于配置的核心思想 默认帮我们进行了很多设置,多数SpringBoot应用只需要很少的Spring配置。同时它集成了大量常用的第三方库配置(例如:Redis、MongoDB、RabbitMQ、Quartz等等),Spring Boot 应用中这些第三方库几乎可以零配置的开箱即用。
简单来说就是Spring Boot其实不是什么新的框架,它是默认配置了很多框架的使用方式,就像maven整合了所有的jar包,spring boot整合了所有的框架
Spring boot出生名门,从一开始就站在一个比较高的起点,又经过这几年的发展,生态足够完善,Spring Boot已经当之无愧成为Java领域最热门的技术
1.4、SpringBoot的主要优点
- 为所有Spring开发者更快的入门
- 开箱即用 ,提供各种默认配置来简化项目配置
- 内嵌式容器简化Web项目
- 没有冗余代码生成和XML配置的要求
2、什么是微服务架构
微服务原文链接:https://martinfowler.com/articles/microservices.html
翻译版:https://www.cnblogs.com/liuning8023/p/4493156.html
3、第一个SpringBoot程序
idea集成了https://start.spring.io/
3.1、SpringBoot自动配置原理分析
3.2 SpringBoot启动原理
SpringApplication.run(HellowordApplication.class, args);
分析该方法主要分两部分,一部分是SpringApplication的实例化,二是run方法的执行
SpringApplication
这个类主要做了以下四件事情
- 推断应用的类型是普通项目还是WEB项目
- 查找并加载所有可用初始化器,设置到initializers属性中
- 找出所有的应用程序监听器,设置到listeners属性中
- 推断并设置main方法的定义类,找到运行的主类
3.3 SpringBoot配置文件
SpringBoot使用一个全局的配置文件,配置文件名称是固定的
- application.properties
语法结构:key=value - application.yml 或 application.yaml
语法结构:key: 空格value
配置文件的作用:修改SpringBoot自动配置的默认值,因为SpringBoot在底层都给我们自动配置好了
以前的配置文件,大多数都是使用xml来配置;比如一个简单的端口配置,我们来对比下yaml和xml
yaml配置:
server:
port: 8070
XML配置
<server>
<port>8070</port>
</server>
@ConfigurationProperties(prefix = “person”) 自动加载yaml文件
@PropertySource(value = “classpath:application.properties”)
- configurationProperties只需要写一次即可,value则需要每个字段都添加
- 松散绑定,比如yaml中写的last-name,这个和llastName是一样的,-后面跟着的字母默认是大写的,这就是松散绑定
- JSR303数据校验,这个就是我们可以在字段增加一层过滤器验证,可以保证数据的合法性
- 复杂类型封装,yaml中可以封装对象,使用@value就不支持
多环境配置及配置文件位置
server:
port: 8081
spring:
profiles:
active: test
---
server:
port: 8082
spring:
profiles: test
位置:
Spring Boot will automatically find and load application.properties and application.yaml files from the following locations when your application starts:
Spring Boot将自动查找并加载应用程序。属性和应用程序。当你的应用程序启动时,yaml文件从以下位置:
- The classpath root 根路径
- The classpath /config package config包
- The current directory 当前目录
- The /config subdirectory in the current directory 当前目录下的/config子目录
- Immediate child directories of the /config subdirectory /config子目录的直接子目录
4. SpringBoot Web开发
静态资源路径:
protected void addResourceHandlers(ResourceHandlerRegistry registry) {
super.addResourceHandlers(registry);
if (!this.resourceProperties.isAddMappings()) {
logger.debug("Default resource handling disabled");
} else {
ServletContext servletContext = this.getServletContext();
this.addResourceHandler(registry, "/webjars/**", "classpath:/META-INF/resources/webjars/");
this.addResourceHandler(registry, this.mvcProperties.getStaticPathPattern(), (registration) -> {
registration.addResourceLocations(this.resourceProperties.getStaticLocations());
if (servletContext != null) {
registration.addResourceLocations(new Resource[]{new ServletContextResource(servletContext, "/")});
}
});
}
}
private static final String[] CLASSPATH_RESOURCE_LOCATIONS = new String[]{"classpath:/META-INF/resources/", "classpath:/resources/", "classpath:/static/", "classpath:/public/"};
- 在springboot,我们可以使用以下方式处理静态资源
- webjars
localhost:8080/webjars
- public,static,/**,resource
localhost:8080/
- webjars
- 优先级:resource > static > public
特别鸣谢