目录
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.Spring的bean的生命周期
在创建
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
直接结果返回