Spring面试题是经常在Java面试被问到的,下面重点详解最常见的Spring面试题及答案。
1.什么是Spring框架?
Spring是一个开源的Java企业应用程序框架,用于构建基于Java的Web应用程序和服务。
2.Spring体系结构?
Spring体系结构如下图:
Spring框架至今已集成了20多个模块,这些模块分布在以下模块中:
- 核心容器,比如:Spring IOC等;
- 数据访问集成等;
- Web层;
- Spring AOP模块;
- 消息传输(Messaging);
- 测试(Test)模块等;
3.Spring框架的优点是什么?
Spring框架的优点包括:简化开发、提高生产力、提高代码可重用性、易于测试、提供AOP和事务管理等。
4.Spring框架中的IoC是什么?
Spring IOC,就是控制反转,是Spring框架中的一个核心概念,它将对象的创建和依赖注入的过程交给Spring容器管理,而不是在应用程序代码中直接创建和管理对象。
Spring IOC不是一种技术,只是一种思想,一个重要的面向对象编程的法则,它能指导我们如何设计出松耦合、更优良的程序。
传统应用程序都是由我们在类内部主动创建依赖对象,从而导致类与类之间高耦合,难于测试,有了IoC容器后,把创建和查找依赖对象的控制权交给了容器,如下图所示:
上图引入了IOC容器,使得A、B、C、D这4个对象没有了耦合关系,齿轮之间的传动全部依靠“第三方”了,全部对象的控制权全部上缴给“第三方”IOC容器。
所以,IOC借助于“第三方”实现具有依赖关系的对象之间的解耦,使程序更优良。
5.Spring框架中的AOP是什么?
Spring AOP (Aspect Orient Programming),直译过来就是 面向切面编程,AOP 是一种编程思想,是面向对象编程的一种补充。
面向切面编程,实现在不修改源代码的情况下给程序动态统一添加额外功能的一种技术,如下图所示:
Spring AOP它允许在应用程序的业务逻辑之外进行横切关注点的处理。
6.AOP的应用场景有哪些?
Spring AOP的应用场景,例如:日志记录、性能监控、事务管理、权限验证等。
7.Spring AOP的实现原理?
Spring AOP 采用了两种混合的实现方式:JDK 动态代理和 CGLib 动态代理。
- JDK动态代理:Spring AOP的首选方法。 每当目标对象实现一个接口时,就会使用JDK动态代理。目标对象必须实现接口。
- CGLIB代理:如果目标对象没有实现接口,则可以使用CGLIB代理。
8.Spring框架中的Bean是什么?
Bean是Spring框架中的一个基本概念,它是Spring容器中的对象,可以通过IoC容器进行管理和依赖注入。
9.Spring Bean生命周期?
Spring Bean的生命周期如下,主要分为以下8大步骤:
1、实例化Bean对象;
2、设置Bean属性;
3、如果通过各种Aware接口声明了依赖关系,则会注入Bean对容器基础设施层面的依赖
Aware接口集体包括BeanNameAware、BeanFactoryAware和ApplicationContextAware
分别注入Bean ID、Bean Factory 和ApplicationContext
4、如果实现了BeanPostProcesser,调用BeanPostProcesser的前置初始化方法postProcessBeforeInitialization;
5、如果实现了InitializingBean接口,则会调用afterPropertiesSet方法;
6、调用Bean自身定义的init方法;
7、调用BeanPostProcesser的后置方法postProcessAfterInitialization;
8、容器关闭前调用DisposableBean的destroy方法和自身的destroy方法。
10.Spring框架中的Bean作用域有哪些?
Spring框架中的Bean作用域包括:singleton、prototype、request、session、global session等。
11.Spring框架中的依赖注入方式有哪些?
Spring框架中的依赖注入方式包括:构造函数注入、Setter方法注入、字段注入、注解注入等。
12.Spring框架中的事务管理是什么?有哪些方式?
Spring框架中的事务管理是一种机制,用于管理数据库操作的事务性,确保数据的一致性和可靠性。
Spring事务有两种方式:编程式事务管理、声明式事务管理:
13.Spring框架中的MVC是什么?
可以用如下的图形来表示MVC三者之间的关系:
1.模型(Model)
模型封装了数据及对数据的操作,可以直接对数据库进行访问,不依赖视图和控制器,也就是说模型并不关注数据如何展示,只负责提供数据。GUI 程序模型中数据的变化一般会通过观察者模式通知视图,而在 web 中则不会这样。
2.视图(View)
视图从模型中拉取数据,只负责展示,没有具体的程序逻辑。
3.控制器(Controller)
控制器用于控制程序的流程,将模型中的数据展示到视图中。
14.Spring MVC五大组件?
Spring MVC五大组件,如下图所示:
包含:
1.前端控制器 DispatcherServlet
2.处理器映射器 HandlerMapping
3.处理器适配器 HandlerAdapter
4.视图解析器(ViewResolver)
5.视图渲染(View)
14.Spring MVC 的工作流程?
Spring MVC 的工作流程:
1) 客户端发送请求,请求到达 DispatcherServlet 主控制器;
2) DispatcherServlet 控制器调用 HandlerMapping 处理;
3) HandlerMapping 负责维护请求和 Controller 组件对应关系;
4) 执行 Controller 组件的业务处理,需要访问数据库调用 DAO 等组件;
5)Controller 业务方法处理完毕后,会返回一个 ModelAndView 对象;
6)Servlet 主控制器调用 ViewResolver 组件,根据 ModelAndView 信息处理;
7)控制器将响应信息给用户输出。
15.什么是Spring注解?
传统的Spring做法是使用.xml文件来对bean进行注入或者是配置aop、事物,这么做有两个缺点:
1、如果所有的内容都配置在.xml文件中,那么.xml文件将会十分庞大;如果按需求分开.xml文件,那么.xml文件又会非常多。总之这将导致配置文件的可读性与可维护性变得很低
2、在开发中在.java文件和.xml文件之间不断切换,是一件麻烦的事,同时这种思维上的不连贯也会降低开发的效率
为了解决这两个问题,Spring引入了注解,通过”@XXX”的方式,让注解与Java Bean紧密结合,既大大减少了配置文件的体积,又增加了Java Bean的可读性与内聚性。
16.Spring框架中的Spring Boot是什么?
Spring Boot是Spring框架中的一个子项目,它提供了一种快速创建和部署基于Spring的应用程序的方法,自动配置Spring和第三方库,简化了应用程序的开发和部署过程。
17.SpringBoot的核心注解有哪些?
启动类上面的注解是@SpringBootApplication,它也是 Spring Boot 的核心注解,主要组合包含了以下 3 个注解:
1)@SpringBootConfiguration
组合了 @Configuration 注解,实现配置文件的功能。
2)@EnableAutoConfiguration
打开自动配置的功能,也可以关闭某个自动配置的选项,如关闭数据源自动配置功能:@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })。
3)@ComponentScan
18.SpringBoot 与 SpringCloud 区别?
SpringBoot 是快速开发的 Spring 框架,SpringCloud 是完整的微服务框架,SpringCloud 依赖于 SpringBoot。
以上就是常见的Spring面试题及答案详解,更多的Java面试题及答案,请查看:1000+Java面试题及答案详解。
陈睿mikechen
10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。
关注「mikechen」公众号,获取更多技术干货!
后台回复【面试】即可获取《史上最全阿里Java面试题总结》,后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》