编辑
2024-05-02
后端
00
请注意,本文编写于 422 天前,最后修改于 400 天前,其中某些信息可能已经过时。

目录

1. Spring Bean
1.1 单例 Bean 是线程安全的吗
1.2 Bean 的生命周期
1.3 Bean 的循环依赖
2. Spring AOP
2.1 记录日志
2.2 事务
3. 事务失效
4. SpringMVC
5. SpringBoot 自动配置原理
6. Spring 框架中常见的注解

1. Spring Bean

1.1 单例 Bean 是线程安全的吗

  • singleton : bean 在每个 Spring IOC 容器中只有一个实例。
  • prototype:一个 bean 的定义可以有多个实例。

Spring bean 并没有可变的状态 (比如 Service 类和 DAO 类),所以在某种程度上说 Spring 的单例 bean 是线程安全的。

1.2 Bean 的生命周期

  1. 定义Bean

Spring 容器在进行实例化时,会将 xml 配置的 <bean> 的信息封装成一个 BeanDefinition 对象,Spring 根据 BeanDefinition 来创建 Bean 对象,里面有很多的属性用来描述 Bean

2. 初始化赋值和销毁Bean

1.3 Bean 的循环依赖

三级缓存解决循环依赖

  • Spring 解决循环依赖是通过三级缓存,对应的三级缓存如下所示:

一级缓存作用:限制 bean 在 beanFactory 中只存一份,即实现 singleton scope,解决不了循环依赖 二级缓存:缓存早期的 bean 对象(生命周期还没走完),二级缓存不能解决对象增强问题 三级缓存:缓存的是 ObjectFactory,表示对象工厂,用来创建某个对象的

2. Spring AOP

AOP 称为面向切面编程,用于将那些与业务无关,但却对多个对象产生影响的公共行为和逻辑,抽取并封装为一个可重用的模块,这个模块被命名为“切面”(Aspect),减少系统中的重复代码,降低了模块间的耦合度,同时提高了系统的可维护性。

常见的 AOP 使用场景:

  • 记录操作日志
  • 缓存处理
  • Spring 中内置的事务处理

2.1 记录日志

获取请求的用户名、请求方式、访问地址、模块名称、登录 ip、操作时间,记录到数据库的日志表中

2.2 事务

Spring 支持编程式事务管理声明式事务管理两种方式。

  • 编程式事务控制:需使用 TransactionTemplate 来进行实现,对业务代码有侵入性,项目中很少使用
  • 声明式事务管理:声明式事务管理建立在 AOP 之上的。其本质是通过 AOP 功能,对方法前后进行拦截,将事务处理的功能编织到拦截的方法中,也就是在目标方法开始之前加入一个事务,在执行完目标方法之后根据执行情况提交或者回滚事务。

3. 事务失效

Spring 事务失效的场景有哪些

  • 异常捕获处理
  • 抛出检查异常
  • 非 public 方法

4. SpringMVC

  1. 视图阶段(老旧 JSP 等)

  2. 前后端分离阶段(接口开发,异步)

5. SpringBoot 自动配置原理

点击进入 @SpringBootApplication 注解,可看见其由几个注解组成

  • @SpringBootConfiguration :该注解与 @Configuration 注解作用相同,用来声明当前也是一个配置类。
  • @ComponentScan :组件扫描,默认扫描当前引导类所在包及其子包。
  • @EnableAutoConfiguration :SpringBoot 实现自动化配置的核心注解。

其中 @EnableAutoConfiguration 又由几个注解组成

点开 spring.factories 中其中一个 configuration,可看见

6. Spring 框架中常见的注解

Spring 的常见注解有哪些?

注解说明
@Component、@Controller、@Service、@Repository使用在类上用于实例化Bean
@Autowired使用在字段上用于根据类型依赖注入
@Qualifier结合@Autowired一起使用用于根据名称进行依赖注入
@Scope标注Bean的作用范围
@Configuration指定当前类是一个 Spring 配置类,当创建容器时会从该类上加载注解
@ComponentScan用于指定 Spring   在初始化容器时要扫描的包
@Bean使用在方法上,标注将该方法的返回值存储到Spring容器中
@Import使用@Import导入的类会被Spring加载到IOC容器中
@Aspect、@Before、@After、@Around、@Pointcut用于切面编程(AOP)
SpringMVC 常见的注解有哪些?
注解说明
@RequestMapping用于映射请求路径,可以定义在类上和方法上。用于类上,则表示类中的所有的方法都是以该地址作为父路径
@RequestBody注解实现接收http请求的json数据,将json转换为java对象
@RequestParam指定请求参数的名称
@PathViriable从请求路径下中获取请求参数(/user/{id}),传递给方法的形式参数
@ResponseBody注解实现将controller方法返回对象转化为json对象响应给客户端
@RequestHeader获取指定的请求头数据
@RestController@Controller + @ResponseBody
Springboot 常见注解有哪些?
注解说明
@SpringBootConfiguration组合了- @Configuration注解,实现配置文件的功能
@EnableAutoConfiguration打开自动配置的功能,也可以关闭某个自动配置的选
@ComponentScanSpring组件扫描
注解说明
@Component、@Controller、@Service、@Repository使用在类上用于实例化Bean
@Autowired使用在字段上用于根据类型依赖注入
@Qualifier结合@Autowired一起使用用于根据名称进行依赖注入
@Scope标注Bean的作用范围
@Configuration指定当前类是一个 Spring 配置类,当创建容器时会从该类上加载注解
@ComponentScan用于指定 Spring   在初始化容器时要扫描的包
@Bean使用在方法上,标注将该方法的返回值存储到Spring容器中
@Import使用@Import导入的类会被Spring加载到IOC容器中
@Aspect、@Before、@After、@Around、@Pointcut用于切面编程(AOP)
注解说明
@RequestMapping用于映射请求路径,可以定义在类上和方法上。用于类上,则表示类中的所有的方法都是以该地址作为父路径
@RequestBody注解实现接收http请求的json数据,将json转换为java对象
@RequestParam指定请求参数的名称
@PathViriable从请求路径下中获取请求参数(/user/{id}),传递给方法的形式参数
@ResponseBody注解实现将controller方法返回对象转化为json对象响应给客户端
@RequestHeader获取指定的请求头数据
@RestController@Controller + @ResponseBody
如果对你有用的话,可以打赏哦
打赏
ali pay
wechat pay

本文作者:peepdd864

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!