Spring面试问题汇总①
- ⭐Spring是什么
- 对AOP的理解
- ⭐对IOC的理解
- ⭐如何实现IOC容器
- SpringBoot、SpringMVC、Spring的区别
- ⭐⭐ApplicationContext和BeanFactory的区别
- ⭐⭐⭐SpringBean的生命周期
- ⭐⭐解释下Spring支持的几种bean的作用域
- ⭐⭐Spring框架中的单例bean是线程安全的吗?
- ⭐⭐Spring框架中都用到了哪些设计模式
- ⭐Spring事务的实现方式和原理以及隔离级别
- ⭐Spring事务传播机制
- ⭐Spring什么时候会失效
- ⭐⭐什么是bean的自动装配,有哪些方式
- ⭐⭐SpringMVC的工作流程
- ⭐SpringMVC的主要组件
- ⭐⭐SpringBoot自动配置原理
- ⭐⭐如何理解SpringBoot的Starter
- 什么是嵌入式服务器,为什么要使用嵌入式服务器
总结了目前主流平台中常见的面试题,标⭐为重点!
⭐Spring是什么
轻量级的开源的J2EE框架。它是一个容器框架,用来装javabean (java对象),中间层框架(万能胶)可以起一个连接作用,比如说把Struts和hibernate粘合在一起运用,可以让我们的企业开发更快、更简洁
Spring是一个轻量级的控制反转(IOC)和面向切面(AOP)的容器框架
- 从大小与开销两方面而言Spring都是轻量级的。
- 通过控制反转(loC)的技术达到松耦合的目的
- 提供了面向切面(AOP)编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务进行内聚性的开发
- 包含并管理应用对象(Bean)的配置和生命周期,这个意义上是一个容器。
- 将简单的组件配置、组合成为复杂的应用,这个意义上是一个框架。
通过分离应用的业务逻辑与系统级服务进行内聚性的开发 ?
- 比如写日志:如果没有使用aop,那么日志会分散在业务代码的四处,使用aop可以采用一个专门写日志的切面,让切面自动的打印日志
对AOP的理解
⭐对IOC的理解
容器概念、控制反转、依赖注入
控制反转:原本A依赖B是在A中直接创建B,而现在是IOC将B主动注入到A。
⭐如何实现IOC容器
- 配置文件配置包扫描路径
- 递归包扫描获取.class文件
- 反射,确定需要交给IoC管理的类
- 对需要注入的类进行依赖注入
更详细的说法
SpringBoot、SpringMVC、Spring的区别
⭐⭐ApplicationContext和BeanFactory的区别
- 都是bean工厂,bean容器
- Beanfactory是Spring中非常核心的组件,表示Bean工厂,可以生成Bean,维护Bean,而ApplicationContext继承了BeanFactory,所以AplicationContext拥有BeanFactory所有的特点,也是一个Bean工厂,但是ApplicationContext除开继承了Beanfactory之外,还继承了诸如EnvironmentCapable、MessageSource、ApplicationEventPublisher等接口,从而ApplicationContext还有获取系统环境变量、国际化、事件发布等功能,这是BeanFactory所不具备的、
源码
- 面试回答:
ApplicationContext是BeanFactory的子接口
ApplicationContext提供了更完整的功能:
①继承Messagesource,因此支持国际化。
②统一的资源文件访问方式。
③提供在监听器中注册bean的事件。
④同时加载多个配置文件。
⑤载入多个(有继承关系)上下文,使得每一个上下文都专注于一个特定的层次,比如应用的web层。
扩展
⭐⭐⭐SpringBean的生命周期
- 解析类得到BeanDefinition
- 如果有多个构造方法,则要推断构造方法
- 确定好构造方法后,进行实例化得到一个对象
- 对对象中的加了@Autowired注解的属性进行属性填充
- 回调Aware方法,比如BeanNameAware,BeanFactoryAware
- 调用BeanPostProcessor的初始化前的方法
- 调用初始化方法
- 调用BeanPostProcessor的初始化后的方法,在这里会进行AOP
- 如果当前创建的bean是单例的则会把bean放入单例池
- 使用bean
- Spring容器关闭时调用DisposableBean中destory()方法
⭐⭐解释下Spring支持的几种bean的作用域
⭐⭐Spring框架中的单例bean是线程安全的吗?
不是线程安全的
⭐⭐Spring框架中都用到了哪些设计模式
⭐Spring事务的实现方式和原理以及隔离级别
⭐Spring事务传播机制
⭐Spring什么时候会失效
⭐⭐什么是bean的自动装配,有哪些方式
⭐⭐SpringMVC的工作流程
⭐SpringMVC的主要组件
- 最核心的是HandlerMapping、HandlerAdapter,这俩都是接口
因为ViewResolver(视图解析器)用于jsp,但现在前后端分离所以不是很重要
⭐⭐SpringBoot自动配置原理
⭐⭐如何理解SpringBoot的Starter
- 使用spring + springmvc使用,如果需要引入mybatis等框架,需要到xml中定义mybatis需要的bean
- starter就是定义一个starter的jar包,写一个@Configuration配置类、将这些bean定义在里面,然后在starter包的META-INF/spring.factories中写入该配置类,springboot会按照约定来加载该配置类
- 开发人员只需要将相应的starter包依赖进应用,进行相应的属性配置(使用默认配置时,不需要配置),就可以直接进行代码开发,使用对应的功能了,比如mybatis-spring-boot–starter,spring-boot-starter-redis
什么是嵌入式服务器,为什么要使用嵌入式服务器
拿tomcat举例:
- 节省了下载安装tomcat,应用也不需要再打war包,然后放到webapp目录下再运行
- 只需要一个安装了Java的虚拟机,就可以直接在上面部署应用程序了
- springboot已经内置了tomcat.jar,运行main方法时会去启动tomcat,并利用tomcat的spi机制加载springmvc