Spring,SpringMVC 常见面试题

目录

1.介绍一下Spring的IOC

2.介绍一下Spring的AOP

3.Spring中事务失效的场景有哪些

4.Spring的bean的生命周期

5.Spring中的循环引用

6.什么是MVC

7.SpringMVC的执行流程


1.介绍一下Spring的IOC

所谓的IOC,就是控制反转的意思。

在传统的程序设计中,应用程序代码通常控制着对象的创建和管理。例如,一个对象需要依赖另一个对象,那么它会直接new出来对象。这样的设计通常被称为“控制流程”。

而在IOC中,控制关系发生了反转。控制权被转移到了Spring容器中,容器负责创建和管理对象,并在需要的时候将他们注入到应用程序中。

所以,原来这个对象的控制权在我们的代码中,我们自己new的对象,在Spring中,应用程序不再控制对象的创建,而是被动地接受由容器注入的对象。这样的控制权的转换就成为控制反转。也就是说,没有Spring的话,我们要使用的对象,需要我们自己new,而有了Spring的IOC之后,对象由IOC容器创建并管理,我们只需要在想要使用的时候从容器中获取就可以了。

2.介绍一下Spring的AOP

 

aop 是面向切面编程,在 spring 中用于将那些与业务无关,但却对多个对象产
生影响的公共行为和逻辑,抽取公共模块复用,降低耦合,一般比如可以做
为公共日志保存,事务处理等
例如,在后台管理系统中,就是使用aop来记录了系统的操作日志主要思路是这样的,使用aop中的环绕通知+切点表达式,这个表达式就是要找到要记录日志的方法,然后通过环绕通知的参数获取请求方法的参数,比如类信息、方法信息、注解、请求方式等,获取到这些参数以后,保存到数
据库

3.Spring中事务失效的场景有哪些

第一个,如果方法上异常捕获处理,自己处理了异常,没有抛出,就会导致
事务失效,所以一般处理了异常以后,别忘了跑出去就行了
第二个,如果方法抛出检查异常,如果报错也会导致事务失效,最后在
spring 事务的注解上,就是 @Transactional 上配置 rollbackFor 属性为
Exception ,这样别管是什么异常,都会回滚事务
第三,如果方法上不是 public 修饰的,也会导致事务失效

4.Springbean的生命周期

在创建 bean 的时候,第一步是调用构造函数实例化 bean
第二步是 bean 的依赖注入,比如一些 set 方法注入,像平时开发用的 @Autowire都是这一步完成
第三步是处理 Aware 接口,如果某一个 bean 实现了 Aware 接口就会重写方法
执行
第四步是 bean 的后置处理器 BeanPostProcessor ,这个是前置处理器
第五步是初始化方法,比如实现了接口 InitializingBean 或者自定义了方法
init-method 标签或 @PostContruct
第六步是执行了 bean 的后置处理器 BeanPostProcessor ,主要是对 bean 进行
增强,有可能在这里产生代理对象
最后一步是销毁bean

5.Spring中的循环引用

在Spring框架中,循环依赖是指两个两个或多个bean之间相互依赖,形成了一个循环引用的情况。如果不加以处理,这种情况会导致应用程序启动失败。
在Spring中,解决循坏依赖的方式就引入了三级缓存。
循环依赖:循环依赖其实就是循环引用 , 也就是两个或两个以上的 bean 互相持
有对方 , 最终形成闭环。比如 A 依赖于 B,B 依赖于 A
循环依赖在 spring 中是允许存在, spring 框架依据三级缓存已经解决了大部
分的循环依赖
一级缓存:单例池,缓存已经经历了完整的生命周期,已经初始化完成的
bean 对象
二级缓存:缓存早期的 bean 对象(生命周期还没走完)
三级缓存:缓存的是 ObjectFactory ,表示对象工厂,用来创建某个对象的
具体流程:
第一,先实例 A 对象,同时会创建 ObjectFactory 对象存入三级缓存
singletonFactories
第二, A 在初始化的时候需要 B 对象,这个走 B 的创建的逻辑
第三, B 实例化完成,也会创建 ObjectFactory 对象存入三级缓存 singletonFactories
第四, B 需要注入 A ,通过三级缓存中获取 ObjectFactory 来生成一个 A 的对象
同时存入二级缓存,这个是有两种情况,一个是可能是 A 的普通对象,另外
一个是 A 的代理对象,都可以让 ObjectFactory 来生产对应的对象,这也是三
级缓存的关键
第五, B 通过从通过二级缓存 earlySingletonObjects 获得到 A 的对象后可以正
常注入, B 创建成功,存入一级缓存 singletonObjects
第六,回到 A 对象初始化,因为 B 对象已经创建完成,则可以直接注入 B A
创建成功存入一次缓存 singletonObjects
第七,二级缓存中的临时对象 A 清除 

6.什么是MVC

MVC是指Model-View-Controller,是一种软件设计模式。它将应用程序分为三个部分:模型,视图和控制器。这个模式的目的是将应用程序的表示(视图)与处理(控制器)分开 

7.SpringMVC的执行流程

1 、用户发送出请求到前端控制器 DispatcherServlet ,这是一个调度中心
2 DispatcherServlet 收到请求调用 HandlerMapping (处理器映射器)
3 HandlerMapping 找到具体的处理器 ( 可查找 xml 配置或注解配置 ) ,生成处
理器对象及处理器拦截器 ( 如果有 ) ,再一起返回给 DispatcherServlet
4 DispatcherServlet 调用 HandlerAdapter (处理器适配器)
5 HandlerAdapter 经过适配调用具体的处理器( Handler/Controller
6 Controller 执行完成返回 ModelAndView 对象
7 HandlerAdapter Controller 执行结果 ModelAndView 返回给
DispatcherServlet
8 DispatcherServlet ModelAndView 传给 ViewReslover (视图解析器)
9 ViewReslover 解析后返回具体 View (视图)
 
10 DispatcherServlet 根据 View 进行渲染视图(即将模型数据填充至视图
中)
11 DispatcherServlet 响应用户
现在的开发,基本都是前后端分离的开发的,并没有视图这些,一般都
handler 中使用 Response 直接结果返回
  • 7
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值