当前位置: 首页 > article >正文

关于SpringBoot的理解

写一点我在做云盘项目的时候对SpringBoot框架的理解

Bean

对于Spring,我们可以把他理解为一个容器。我们命令这个容器完成一些任务。这个容器里的东西就是Bean。Bean可以是任何的java对象。但这个对象(Bean)不由程序员直接控制,而是由Spring容器控制。控制的内容包括Bean的基本信息,作用域,初始化方法和生命周期等等。使用Bean的好处在于可是现实注入依赖(DI),不同组件之间功能解耦,更好地控制生命周期等等
Bean的生命周期有创建实例,注入依赖,初始化,使用和销毁。
Bean的作用域有单例,原型(Prototype),会话等等。

MVC

SpringBoot框架使用MVC设计模式(那么他当然集成了Spring MVC框架)

MVC指的是 model view和controller。关于他们的关系可以大致这么理解:model负责处理后端服务器,包括和数据库的链接和一些后端服务,view就是前端用户看到的页面,而controller则是调用model和view的一个控制器,可以把他理解成前后端的一个中介

在一个简单SpringBoot任务中,通常会含有config,controller,dao,model,service和util文件夹,他们在MVC中扮演的角色如下所示​​
在这里插入图片描述
其中crud指的是数据库的:创建,读取,更新,删除

Sping容器

Spring 容器可以看作是实现了工厂模式、单例模式和代理模式等设计模式的综合体:
工厂模式: 负责创建和管理 Bean 对象。
单例模式: 默认情况下,容器会为每个 Bean 创建一个单例对象。
代理模式: 用于实现 AOP 和动态代理功能。

理解的话感觉可以就把Spring容器理解成一个工厂,只不过他实现了比工厂更多的内容

反射

依赖注入:通过反射动态创建对象并注入依赖。

SpringBoot框架会首先扫描全部的类,并找到被@Service等修饰的类。扫描:启动main函数之后SpringBoot会扫描@SpringBootApplication(即主文件)所在包及其子包中的所有类,起始路径又主文件所在包的路径决定。
随后通过反射机制、根据类的全称限定名获取类的.class文件,然后用classLoader加载每个类,检查他们是否包含Spring注解(@Component、@Service、@Controller、@Repository等),如果是的话这个对象会被注册到Spring容器中,形成一个Bean。

如果某个类中有东西被@Autowired、@Resource等注解,Spring 会通过反射查找对应的 Bean 并将这个Bean注入到对应字段或参数中。这样这个属性实际上就变成了这个注入类对应的Bean实例。

注入依赖的主要目的是实现控制类和其他类之间解耦。控制类不再依赖于其他类的具体实现细节,而是依赖于他的抽象或接口。

动态代理:利用反射实现 AOP 和事务管理。

注解解析:扫描注解并根据元数据实现功能。

配置解析:反射调用配置类的方法或加载自动配置类。

方法调用:动态绑定方法参数并调用目标方法。

日志

日志是在控制台或一些文件或一些其他地方打印出来的信息,用于帮助我们更好的监控程序运行情况,日志一般长这个样子。

2024-11-26 10:30:45 INFO  [main] com.example.MyClass - Application started successfully

日志根据他表示信息的细节程度不同有以下几种类型(越细说明越不重要)
在这里插入图片描述
在SpringBoot中,已经集成了LogBack,我们只需要再加上一个简单的Slf4j库就可以很简单地创建一个Logger对象并输出日志了。但每条日志依然需要我们自己去操控来实现输出

需要注意的是,每个项目都会设置一个日志等级,如果定义的等级低于设置的等级(即他的粒度更细,更不重要),那么定义的这个日志将不会输出。

session

session:会话 cookie的一部分,跟踪和这个用户和服务器之间的联系。Session 是一种逻辑上的状态存储机制,弥补了 HTTP 协议无状态的特性# 某些注解的作用。在用户登录时(或其他需要的时候),可以显式地创建为一个请求创建一个session,并在用户退出的时候清除这个session。

request.getSession().setAttribute("user", user);
request.getSession().invalidate();

在用户首次登录的时候,SpringBoot框架会自动为用户创建一个cookie。在调用getSession的时候(创建Session时)SpringBoot会为这个Session自动创建一个ID并储存在cookie中。当关闭Session的时候,其实也是SpringBoot框架根据用户被分配的ID找到对应的Session来完成关闭

一些注解

@Controller:

告诉SpringBoot框架(或者说是Spring容器)这是一个controller。以便告知容器对他进一步扫描

@Autowired:

告知Spring容器需要对这个对象进行注入

@ResponseBody:

如果一个方法被这个直接修饰了,那么他的返回值将不再以view视图返回给前端,而是被转化为JSON格式,通过HTTP协议发送给前端。
可以使用@RestController注释整个类来同时实现@Controller和@ResponseBody的作用

@RequestMapping:

告诉SpringBoot框架这是一个处理请求的一个方法,当收到对应路径的请求时,由这个方法来处理请求

@RequestParam:

在方法的参数中使用。用于从请求消息中获取一些参数,其基本语法是

@RequestParam(value = "name", required = false, defaultValue = "111") String name

value参数表明他要获取请求中的哪个内容,如果value名和后面对象名相同的话可以省略。required参数表明这个参数是否是必须的(如果是必须而请求中没有而且没有defaultValue的话会报错)。defaultValue 标明默认值。
@RequestParam获取参数的能力和.getParameter()是相同的,不过是语法不一样,简洁性和功能性不一样

@Value:

这个注解告诉SpringBoot需要从配置文件中找到相应的值来赋给下面的参数,比如

@Value("${key}")

就告诉SpringBoot需要从配置文件中找到key并把key的值赋给被注解的属性(或者方法的参数)


http://www.kler.cn/a/541491.html

相关文章:

  • 【Windows】PowerShell 缓存区大小调节
  • 渗透利器工具:Burp Suite 联动 XRAY 图形化工具.(主动扫描+被动扫描)
  • pip3命令全解析:Python3包管理工具的详细使用指南
  • autMan奥特曼机器人-对接deepseek教程
  • 心脏滴血漏洞复现(CVE-2014-0160)
  • 拉格朗日插值法的matlab实现
  • 无人机常见的定位方式
  • Lisp语言的测试开发
  • 十三. Redis 应用问题和解决方案思想
  • 从零到一:我的元宵灯谜小程序诞生记
  • 从MySQL优化到脑力健康:技术人与效率的双重提升
  • IDEA接入DeepSeek
  • 企业级Mysql实战
  • Vue 响应式渲染 - Vue2 Class和style
  • 功能测试常用方法概述
  • 有关网络安全的案例分享 如何保障网络安全
  • c++面试:符号修饰
  • C# Winform 使用委托实现C++中回调函数的功能
  • Leetcode—1165. 单行键盘【简单】Plus
  • Linux 内核中断处理机制:上半部与下半部详解
  • Spring Boot @Import注解的作用
  • 基于Kotlin中Flow扩展重试方法
  • kotlin的扩展函数介绍
  • MySQL中DDL操作是否支持事务
  • STM32 HAL库 UART通讯(C语言)
  • 从输入网址到网页显示期间发生了什么?