Java开发之框架(spring、springmvc、springboot、mybatis)【面试篇 完结版】

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、框架知识分布
  • 二、Spring
    • 1. spring-单例bean
      • ① 问题引入
      • ② 单例bean是线程安全的吗
      • ③ 问题总结
      • ④ 实战面试
    • 2. spring-AOP
      • ① 问题引入
      • ② AOP记录操作日志
      • ③ Spring事务如何实现的
      • ④ 问题总结
    • 3. Spring-事务失效的场景
      • ① 问题引入
      • ② 情况一:异常捕获处理
      • ③ 情况二:抛出检查异常
      • ④ 非public方法导致事务失效
      • ⑤ 问题总结
    • 4. Spring-bean的生命周期(难)
      • ① 问题引入
      • ② BeanDefinition(Bean的定义信息)
      • ③ 问题总结
    • 5. Spring-bean的循环依赖
      • ① 问题引入
      • ② Spring的循环依赖
      • ③ 问题总结
  • 三、SpringMVC
    • 1. SpringMVC-执行流程
      • ① 问题引入
      • ② 视图阶段(JSP)
      • ③ 前后端分离阶段(接口开发,异步)
      • ④ 问题总结
  • 四、SpringBoot
    • 1. springboot-自动配置
      • ① 问题引入
      • ② 问题总结
  • 五、Spring-框架中常见的注解
    • 1. spring常见的注解
    • 2. springMVC常见注解
    • 3.springboot常见注解
  • 引用说明


前言

本文主要记录spring的单例bean、切面编程AOP、spring事务、循环依赖、常见注解等


提示:以下是本篇文章正文内容,下面案例可供参考

一、框架知识分布

Java开发之框架(spring、springmvc、springboot、mybatis)【面试篇 完结版】_第1张图片
Java开发之框架(spring、springmvc、springboot、mybatis)【面试篇 完结版】_第2张图片

二、Spring

1. spring-单例bean

① 问题引入

Java开发之框架(spring、springmvc、springboot、mybatis)【面试篇 完结版】_第3张图片
Spring框架中的bean是单例的
Java开发之框架(spring、springmvc、springboot、mybatis)【面试篇 完结版】_第4张图片
singleton :bean在每个Spring IOC容器中只有一个实例。
prototype:一个bean的定义可以有多个实例。

② 单例bean是线程安全的吗

count是可修改的成员变量需要考虑线程安全
userService是无法修改的成员变量不需要考虑线程安全
Java开发之框架(spring、springmvc、springboot、mybatis)【面试篇 完结版】_第5张图片

③ 问题总结

Java开发之框架(spring、springmvc、springboot、mybatis)【面试篇 完结版】_第6张图片

④ 实战面试

Java开发之框架(spring、springmvc、springboot、mybatis)【面试篇 完结版】_第7张图片

2. spring-AOP

① 问题引入

Java开发之框架(spring、springmvc、springboot、mybatis)【面试篇 完结版】_第8张图片
AOP称为面向切面编程,用于将那些与业务无关,但却对多个对象产生影响的公共行为和逻辑,抽取并封装为一个可重用的模块,这个模块被命名为“切面”(Aspect),减少系统中的重复代码降低模块间的耦合度,同时提高了系统的可维护性。

常见的AOP使用场景:
1.记录操作日志(每一个service记录操作)
2.缓存处理(业务加缓存,写在AOP的切面拦截需要添加缓存的业务方法)
3.Spring中内置的事务处理

② AOP记录操作日志

获取请求的用户名、请求方式、访问地址、模块名称、登录ip、操作时间,记录到数据库的日志表中,如下图所示:
Java开发之框架(spring、springmvc、springboot、mybatis)【面试篇 完结版】_第9张图片
后台有四个请求接口,需要记录操作日志,使用AOP提供的环绕通知做一个切面,相当于一个通过的代码,遇到请求的时候就可以执行这段代码。
Java开发之框架(spring、springmvc、springboot、mybatis)【面试篇 完结版】_第10张图片
代码解释:https://zhuanlan.zhihu.com/p/596205936?utm_id=0

③ Spring事务如何实现的

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

  1. 编程式事务控制:需使用TransactionTemplate来进行实现,对业务代码有侵入性,项目中很少使用
  2. 声明式事务管理:声明式事务管理建立在AOP之上的。其本质是通过AOP功能**,对方法前后进行拦截**,将事务处理的功能编织到拦截的方法中,也就是在目标方法开始之前加入一个事务,在执行完目标方法之后根据执行情况提交或者回滚事务。(常用)
    Java开发之框架(spring、springmvc、springboot、mybatis)【面试篇 完结版】_第11张图片

④ 问题总结

Java开发之框架(spring、springmvc、springboot、mybatis)【面试篇 完结版】_第12张图片

3. Spring-事务失效的场景

① 问题引入

Java开发之框架(spring、springmvc、springboot、mybatis)【面试篇 完结版】_第13张图片
对spring框架的深入理解、复杂业务的编码经验

  1. 异常捕获处理
  2. 抛出检查异常
  3. 非public方法

② 情况一:异常捕获处理

转账的代码中出现一个异常,由于这个异常会被try-catch捕获却没有抛出,所以可能导致事务失效(如果异常没有被捕获,就会发生事务回滚)
Java开发之框架(spring、springmvc、springboot、mybatis)【面试篇 完结版】_第14张图片
原因分析: 事务通知只有捉到了目标抛出的异常,才能进行后续的回滚处理,如果目标自己处理掉异常,事务通知无法知悉
解决方法: 在catch块添加throw new RuntimeException(e)抛出
Java开发之框架(spring、springmvc、springboot、mybatis)【面试篇 完结版】_第15张图片

③ 情况二:抛出检查异常

系统找不到指定文件,抛出一个检查异常
Java开发之框架(spring、springmvc、springboot、mybatis)【面试篇 完结版】_第16张图片
原因分析: Spring 默认只会回滚非检查异常
解决方法: 配置rollbackFor属性Transactional(rollbackFor=Exception.class),一旦出现异常都会被事务控制
Java开发之框架(spring、springmvc、springboot、mybatis)【面试篇 完结版】_第17张图片

④ 非public方法导致事务失效

方法没有用public
Java开发之框架(spring、springmvc、springboot、mybatis)【面试篇 完结版】_第18张图片
原因分析: Spring为方法创建代理、添加事务通知、前提条件都是该方法是public的
解决方法: 方法改为public

⑤ 问题总结

Java开发之框架(spring、springmvc、springboot、mybatis)【面试篇 完结版】_第19张图片

4. Spring-bean的生命周期(难)

① 问题引入

Java开发之框架(spring、springmvc、springboot、mybatis)【面试篇 完结版】_第20张图片
Spring容器是如何管理和创建bean实例
方便调试和解决问题

② BeanDefinition(Bean的定义信息)

Spring容器在进行实例化时,会将xml配置的的信息封装成一个BeanDefinition对象,Spring根据BeanDefinition来创建Bean对象,里面有很多的属性用来描述Bean
Java开发之框架(spring、springmvc、springboot、mybatis)【面试篇 完结版】_第21张图片
Java开发之框架(spring、springmvc、springboot、mybatis)【面试篇 完结版】_第22张图片
Java开发之框架(spring、springmvc、springboot、mybatis)【面试篇 完结版】_第23张图片
Java开发之框架(spring、springmvc、springboot、mybatis)【面试篇 完结版】_第24张图片
Java开发之框架(spring、springmvc、springboot、mybatis)【面试篇 完结版】_第25张图片

③ 问题总结

Java开发之框架(spring、springmvc、springboot、mybatis)【面试篇 完结版】_第26张图片

5. Spring-bean的循环依赖

① 问题引入

Java开发之框架(spring、springmvc、springboot、mybatis)【面试篇 完结版】_第27张图片
在创建A对象的同时需要使用的B对象,在创建B对象的同时需要使用到A对象

Java开发之框架(spring、springmvc、springboot、mybatis)【面试篇 完结版】_第28张图片
Java开发之框架(spring、springmvc、springboot、mybatis)【面试篇 完结版】_第29张图片

② Spring的循环依赖

Java开发之框架(spring、springmvc、springboot、mybatis)【面试篇 完结版】_第30张图片

Spring解决循环依赖是通过三级缓存,对应的三级缓存如下所示:
Java开发之框架(spring、springmvc、springboot、mybatis)【面试篇 完结版】_第31张图片
如果要想打破循环依赖,就需要一个中间人的参与,这个中间人就是二级缓存。
一级和二级缓存可以解决一般对象的循环依赖
Java开发之框架(spring、springmvc、springboot、mybatis)【面试篇 完结版】_第32张图片
代理对象需要用到三级缓存
Java开发之框架(spring、springmvc、springboot、mybatis)【面试篇 完结版】_第33张图片
构造方法注入产生的循环依赖问题,使用延迟加载解决问题
Java开发之框架(spring、springmvc、springboot、mybatis)【面试篇 完结版】_第34张图片

③ 问题总结

Java开发之框架(spring、springmvc、springboot、mybatis)【面试篇 完结版】_第35张图片
Java开发之框架(spring、springmvc、springboot、mybatis)【面试篇 完结版】_第36张图片

三、SpringMVC

1. SpringMVC-执行流程

① 问题引入

Java开发之框架(spring、springmvc、springboot、mybatis)【面试篇 完结版】_第37张图片
Springmvc的执行流程是这个框架最核心的内容

  1. 视图阶段(老旧JSP等)
  2. 前后端分离阶段(接口开发,异步)

② 视图阶段(JSP)

重要的组件:前端控制器、处理器映射器、处理器适配器、视图解析器
Java开发之框架(spring、springmvc、springboot、mybatis)【面试篇 完结版】_第38张图片

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

Java开发之框架(spring、springmvc、springboot、mybatis)【面试篇 完结版】_第39张图片

④ 问题总结

Java开发之框架(spring、springmvc、springboot、mybatis)【面试篇 完结版】_第40张图片

Java开发之框架(spring、springmvc、springboot、mybatis)【面试篇 完结版】_第41张图片

四、SpringBoot

1. springboot-自动配置

① 问题引入

Java开发之框架(spring、springmvc、springboot、mybatis)【面试篇 完结版】_第42张图片
自动配置主要依赖于@SpringBootApplication注解,其中还包含了三个注解
Java开发之框架(spring、springmvc、springboot、mybatis)【面试篇 完结版】_第43张图片
@SpringBootConfiguration:该注解与@Configuration注解作用相同,用来声明当前也是
个配置类。
@ComponentScan:组件扫描,默认扫描当前引导类所在包及其子包。
@EnableAutoConfiguration: SpringBoot实现自动化配置的核心注解。

② 问题总结

Java开发之框架(spring、springmvc、springboot、mybatis)【面试篇 完结版】_第44张图片

五、Spring-框架中常见的注解

Java开发之框架(spring、springmvc、springboot、mybatis)【面试篇 完结版】_第45张图片

1. spring常见的注解

Java开发之框架(spring、springmvc、springboot、mybatis)【面试篇 完结版】_第46张图片

2. springMVC常见注解

Java开发之框架(spring、springmvc、springboot、mybatis)【面试篇 完结版】_第47张图片

3.springboot常见注解

Java开发之框架(spring、springmvc、springboot、mybatis)【面试篇 完结版】_第48张图片

引用说明

https://www.bilibili.com/video/BV1yT411H7YK?p=35&vd_source=98092b0aee05ae7c890b09fe07f13df4

你可能感兴趣的:(Java面试宝典,java,spring,spring,boot,springMVC,面试)