1、基本概念
SpringBoot是基于Spring的开源开发框架,通过起步依赖和自动配置等特性简化了Spring的开发和部署。
1、起步依赖指的是引入预定义的一组依赖项集合,无需手动管理每个依赖项的版本,可以减少配置工作和依赖项冲突的问题。
1 2 3 4 | <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> |
这个依赖项包含springmvc,tomcat等组件
2、自动配置指的是通过基于你引入的依赖Jar包,对 SpringBoot应用进行自动配置
2、自动配置
-
自动配置(Auto Configuration):自动配置是Spring Boot的一个核心特性,根据pom.xml引入的依赖对springboot进行自动配置
-
自动装配(Auto-wiring):自动装配是Spring框架的一个特性,用于自动解析和设置Bean之间的依赖关系。自动装配可以根据类型、名称或构造函数等方式进行,使得开发者无需手动配置每个Bean之间的关联关系。通过自动装配,可以减少手动配置的工作量,降低了组件之间的耦合。
例如,springboot实现redis的配置,只需要引入依赖,再配置Redis服务器,然后就可以@autowired直接使用redis的bean对象了,比如redistemplate
3、springboot的启动流程
1、创建IOC容器
2、加载源配置类,也就是main方法所在的类,被@springbootapplication修饰
3、加载并处理所有的配置类,也就是自动配置
4、实例化所有的bean,并实现依赖注入和自动装配
5、启动web服务器,tomcat服务器
4、自动配置流程
依赖@springbootapplication注解,这是个复合注解,由@springbootconfiguration,@componentscan和@autoconfiguration组成
autoconfiguracitonimportselector实现流程:
1、通过spring factories机制加载配置文件:通过classloader获取class path中的配置文件META-IF/spring.factories
2、在配置文件中筛选出以enableautoconfiguration.class为key的符合条件的配置类
3、根据注解@conditional过滤掉不必要的自动配置类
4、将配置类注册到IOC容器中,以及将配置类中的@bean方法的返回类型注入到IOC容器中
5、加载配置类的详细流程
1、首先是处理@componentscan,递归扫描指定的package,默认是@componentscan修饰类所在的package,得到一系列配置类
2、处理@import注解,递归处理得到一系列被导入的配置类
-@import的作用是提供了一种显式地从其它地方加载配置类的方式,这样可以避免使用性能较差的组件扫描(Component Scan)
3、将配置类注册到IOC容器中,以及将配置类中的@bean方法的返回类型注入到IOC容器中
3 、常用注解
1、@RestController
注解是@Controller
和@ResponseBody
的合集,表示这是个控制器 bean,并且是将函数的返回值直接填入 HTTP 响应体中,是 REST 风格的控制器。
- 单独使用
@Controller
不加@ResponseBody
的话一般使用在要返回一个视图的情况,这种情况属于比较传统的Spring MVC 的应用,对应于前后端不分离的情况。 - 但
@RestController
对象数据直接以 JSON 或 XML 形式写入 HTTP 响应(Response)中,这种情况属于 RESTful Web服务,这也是目前日常开发所接触的最常用的情况(前后端分离)。
2、处理常见的HTTP请求:
@GetMapping("users")
等价于@RequestMapping(value="/users",method=RequestMethod.GET)请求从服务器获取特定资源。
@PostMapping("users")
等价于@RequestMapping(value="/users",method=RequestMethod.POST)在服务器上创建一个新的资源。
@PutMapping("/users/{userId}")
等价于@RequestMapping(value="/users/{userId}",method=RequestMethod.PUT)更新服务器上的资源(客户端提供更新后的整个资源)
@DeleteMapping("/users/{userId}")
等价于@RequestMapping(value="/users/{userId}",method=RequestMethod.DELETE)从服务器删除特定的资源。
- PATCH更新服务器上的资源(客户端提供更改的属性,可以看做作是部分更新)
3、前后端传值:
@PathVariable
用于获取路径参数,@RequestParam
用于获取查询参数。
-
@RequestBody:用于读取 Request 请求(可能是 POST,PUT,DELETE,GET 请求)的 body 部分并且是json 格式的数据,接收到数据之后会自动将数据绑定到 Java 对象上去。
@Component
:通用的注解,可标注任意类为Spring
组件。如果一个 Bean 不知道属于哪个层,可以使用@Component
注解标注。@Repository
: 对应持久层即 Dao 层,主要用于数据库相关操作。@Service
: 对应服务层,主要涉及一些复杂的逻辑,需要用到 Dao 层。@Controller
: 对应 Spring MVC 控制层,主要用于接受用户请求并调用 Service 层返回数据给前端页面。@Autowired
注解让 Spring 容器帮我们自动装配 bean。
5、参数效验
@NotEmpty
被注释的字符串的不能为 null 也不能为空@NotBlank
被注释的字符串非 null,并且必须包含一个非空白字符@Null
被注释的元素必须为 null@NotNull
被注释的元素必须不为 null@AssertTrue
被注释的元素必须为 true@AssertFalse
被注释的元素必须为 false@Pattern(regex=,flag=)
被注释的元素必须符合指定的正则表达式@Email
被注释的元素必须是 Email 格式。@Min(value)
被注释的元素必须是一个数字,其值必须大于等于指定的最小值@Max(value)
被注释的元素必须是一个数字,其值必须小于等于指定的最大值@DecimalMin(value)
被注释的元素必须是一个数字,其值必须大于等于指定的最小值@DecimalMax(value)
被注释的元素必须是一个数字,其值必须小于等于指定的最大值@Size(max=, min=)
被注释的元素的大小必须在指定的范围内@Digits(integer, fraction)
被注释的元素必须是一个数字,其值必须在可接受的范围内@Past
被注释的元素必须是一个过去的日期@Future
被注释的元素必须是一个将来的日期
6、springboot最多处理多少请求?
和spring内置的tomcat服务器最大连接数和最大等待数有关,默认最大连接数是8192,最大等待数是100,因此最大处理8292连接。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!