1. Spring SpringMvc SpringBoot的区别
Spring是一个全栈的开发框架,同时是一个容器,还是一个生态
SpringMVC是Spring基础上的一个框架,主要用于解决web开发的问题
即SpringMVC归属于Spring
Springboot 对spring的核心功能做了整合,不开发前端试图,专注与微服务后台接口,不需要配置xml,相对springmvc大大简化了配置流程,目标是简化开发流程
- 创建上下文,调用prepareContext()
- 在prepare Context()方法中调用load方法进行加载bean对象
- 判断资源类型
- 判断启动类是否包含@Component注解,@SpringBootApplication->@SpringBootConfiguration->@Configuration->@Component注解,找到后进行注册
- 调用refresh()方法
3. SpringMVC的工作流程
4. SpringMVC的九大组件
最重要的DispatcherServlet是SpringMVC的核心组件
- HandlerMapping:根据request找到对应的处理器
- HandlerAdapter:调用Handler的适配器
- HandlerExceptionResolver:对异常进行处理
- ViewResolver:找到对应页面进行回显
- RequestToViewNameTranslator:返回viewName
- LocaleResolver:解析区域
- ThemeResolver:主题解析
- MultipartResolver:处理上传请求
- FlashMapManager:在重定向中传递参数
5. Spring的核心
Spring是一个开源框架,是一个生态,并且是这个生态的基石。
Spring是为了简化企业开发而生的,使开发更加简洁
Spring是一个IOC和AOP的容器框架
6.Spring的事务传播机制是什么
7. Spring框架中的单例Bean是安全的吗
Spring对象,默认是单例的,框架中并没有对bean进行多线程的封装处理。
是否安全需要分情况
如果bean是有状态的,即有数据存储的功能,那么需要保证线程安全,即改变singleton为prototype
如果是无·状态的,是线程安全的。
8. Spring框架中使用了哪些设计模式及应用场景
9. 事务是什么?事务的四要素
事务是指是程序中一系列严密的逻辑操作,而且所有操作必须全部成功完成,否则在每个操作中所作的所有更改都会被撤消。
事务的四要素:
- 原子性(Atomicity):操作这些指令时,要么全部执行成功,要么全部不执行。只要其中一个指令执行失败,所有的指令都执行失败,数据进行回滚,回到执行指令前的数据状态。
- 一致性(Consistency):事务的执行使数据从一个状态转换为另一个状态,但是对于整个数据的完整性保持稳定。
- 隔离性(Isolation):隔离性是当多个用户并发访问数据库时,比如操作同一张表时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。
- 持久性(Durability):当事务正确完成后,它对于数据的改变是永久性的。
9.Spring事务的隔离级别
spring中的事务隔离级别就是数据库的隔离级别,有以下几种:
- 读未提交
- 读已提交
- 可重复读
- 串行化
如果数据库中的隔离级别和spring不同,那么以spring的配置为主
10. Spring事务的实现原理
有两种事务实现方式:
- 编程式事务,自己通过代码操作实现
- 声明式事务,通过@Transactional注解实现(常用)
事务操作是一个AOP的实现,通过动态代理方式实现,spring基于这个类生成一个代理对象,将代理对象作为bean,使用代理对象时,如果有事务处理,会关闭事务的自动提交,执行具体的业务逻辑,如果没有出现异常,代理逻辑就会直接提交,如果出现异常,就进行回滚。
11. Spring事务什么时候会失效
- bean对象没有被Spring容器管理
- 方法的返回修饰符不是public
- 自身调用问题
- 数据源没有配置事务管理器
- 数据库不支持事务
- 异常被捕获
- 类型错误或配置错误
12. Spring时如何简化开发的
- 基于bean对象的轻量级和最小侵入性编程
- 通过依赖注入和面向接口实现松耦合
- 基于切面和惯例进行声明式编程
- 通过切面和模板减少样板式代码
13.Spring支持的bean作用域有哪些
- singleton:定义bean时,仅创建一个bean实例,IOC容器每次返回的时同一个bean实例
- prototype:定义bean时,创建多个bean实例,每次返回都是一个新的实例
- request:仅对HTTP请求产生作用,每次HTTP请求都会创建一个新的bean,适用于webapplicationContext环境
- session:仅用于HTTP session,同一个session共享一个实例,不用session使用不同实例
- global-session:仅用于HTTP session,所有session共享一个bean实例
14. 简述Spring bean的生命周期
主要是有实例化、属性赋值、初始化和销毁四大阶段
15. 什么是bean的自动装配,有哪些方式
自动装配指bean的属性值在进行注入的时候通过某种特定的规则和方式去容器中查找,并设置到具体的对象属性中,主要有五种方式(都是xml中的):
- no-缺省:通过ref属性手动指定,较为常用
- byName:根据属性名称自动装配
- byType:根据数据类型自动装配
- constructor:构造函数的byType方法
- autodetect:如果找到默认的构造函数,使用构造函数装配,否则使用byType
注解开发直接使用@Autowired
https://www.cnblogs.com/bear7/p/12531016.html
16. 使用Spring的优势
- Spring通过DI、AOP和消除样板式代码来简化企业级开发
- Spring框架之外还存在一个构建在核心框架之上的庞大生态圈,扩展到不同的领域
- 低嵌入式设计,相互独立
- 独立于各种应用服务器,Write Once, Run Anywhere
- IOC容器提高了组件之间的解耦
- AOP提供了更好的复用
- SPring提供了与第三方框架的良好整合,简化了底层数据库访问
- Spring具有高度的开放性,
17. 说说你对Aop的理解
AOP是面向切面编程,是基于动态代理实现的,他是为解耦而生的
作用:在不惊动原始设计的基础上为其进行功能增强
任何一个系统都是由不同的组件组成的,每个组件负责- -块特定的功能,当然会存在很多组件是跟业务无关的,例如日志、事务、权限等核心服务组件,这些核心服务组件经常融入到具体的业务逻辑中,如果我们为每一个具体业务逻辑操作都添加这样的代码,很明显代码冗余太多,因此我们需要将这些公共的代码逻辑抽象出来变成一一个切面,然后注入到目标对象(具体业务)中去,AOP正是基于这样的一-个思路实现的,通过动态代理的方式,将需要注入切面的对象进行代理,在进行调用的时候,将公共的逻辑直接添加进去,而不需要修改原有业务的逻辑代码,只需要在原来的业务逻辑基础之上做一些增强功能即可。
- 切面:描述在哪个切入点上执行哪个通知
- 连接点:程序执行过程中某个特定的点
- 通知:around before after等等
- 切点:哪些方法要追加方法
18. 说说你对IOC的理解
IoC Inverse of Control即控制反转,是一种设计思想, 将原本在程序中⼿动创建对象的控制权,交由Spring框架来管理。将对象之间的相互依赖关系交给IOC管理,并由IOC容器完成对象的注入。
- 谁控制谁: 之前都是由程序员自己控制对象,IOC由IOC容器来控制对象
- 控制什么: 在实现过程中所需要的以及需要以来的对象
- 什么是反转:在没有IOC容器之前我们都是在对象中主动去创建依赖的对象,这是正转的,而有了IOC之后, 依赖的对象直接由IOC容器创建后注入到对象中,由主动创建变成了被动接受,这是反转
- 哪些方面被反转:依赖的对象
19. BeanFactory和FactoryBean有哪些区别
除了名字比较像以外,没有其他共同点了。
BeanFactory是一个最基础的IOC容器,提供了依赖查找,依赖注入等基础的功能
FactoryBean是创建Bean的一种方式,帮助实现复杂Bean的创建
BeanFactory和ApplicationContext的区别
BeanFactory:是Spring里面最低层的接口,提供了最简单的容器的功能,只提供了实例化对象和拿对象的功能;
ApplicationContext:应用上下文,继承BeanFactory接口,它是Spring的一各更高级的容器,提供了更多的有用的功能;