Spring Framework常用面试题及答案汇总

 更新时间:2020年06月23日 10:14:50   作者:因分享而收获  
这篇文章主要介绍了Spring Framework常用面试题及答案汇总,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

1.什么是Spring Framework ?

Spring Framework 是一个提供了完整性的编程或配置一个现代化的基于JAVA的企业应用,各种基础设施的支持。

参见官方(https://spring.io/projects/spring-framework#overview):

The Spring Framework provides a comprehensive programming and configuration model for modern Java-based enterprise applications - on any kind of deployment platform.

Spring makes it easy to create Java enterprise applications. It provides everything you need to embrace the Java language in an enterprise environment, with support for Groovy and Kotlin as alternative languages on the JVM, and with the flexibility to create many kinds of architectures depending on an application's needs. As of Spring Framework 5.1, Spring requires JDK 8+ (Java SE 8+) and provides out-of-the-box support for JDK 11 LTS. Java SE 8 update 60 is suggested as the minimum patch release for Java 8, but it is generally recommended to use a recent patch release.

2.Spring Framework有哪些核心模块 ?

  • spring-context : 事件驱动,注解驱动,模块驱动等
  • spring-core : Spring基础API模块,如资源管理、泛型处理
  • spring-beans : Spring Bean 相关,如依赖查找、依赖注入
  • spring-aop : Spring AOP 处理,如动态代理、AOP字节码提升
  • spring-expression : Spring表达式语言模块

(项目使用Maven进行管理时,引入 spring-context模块后,则会传递依赖加载其他4个模块)

3.什么是IOC ?

IOC是控制反转,类似于好莱坞原则(你不要打电话给我,我会打电话给你),主要包含依赖查找和依赖注入

4.依赖注入和依赖查找的区别 ?

依赖查找是主动或手动的依赖查找方式,通常需要依赖容器或标准API实现。而依赖注入则是手动或自动依赖绑定的方式,无需依赖特定的容器和API

5.Spring作为IOC容器的优势有哪些 ?

典型的IOC容器管理,依赖注入、依赖查找

  • AOP抽象
  • 事物抽象
  • 事件机制
  • SPI扩展
  • 强大的第三方整合
  • 易测试性 等

6.Spring 中 BeanFactory和FactoryBean区别 ?

BeanFactory是IOC底层容器

FactoryBean 是创建Bean的一种方式,帮助实现复杂的初始化逻辑

7.Spring 中 BeanFactory和ObjectFactory区别 ?

ObjectFactory和BeanFactory均提供依赖查找的能力;

ObjectFactory仅关注一个或一种类型的Bean的依赖查找,并且自身不具备依赖查找的能力,能力则由BeanFactory输出;

BeanFactory则提供了单一类型、集合类型以及层次性等多种依赖查找方式;

8.BeanFactory.getBean 操作是否线程安全 ?

BeanFactory.getBean 方法的执行是线程安全的,操作过程中会增加互斥锁.

9.Spring有多少种依赖注入的方式 ?

  • 构造器注入
  • Setter方法注入
  • 字段注入
  • 方法注入
  • 接口回调注入

10.Spring偏好构造器注入还是Setter注入 ?

两种依赖注入方式均可以使用,如果是必须依赖的话,推荐使用构造器注入,Setter注入用于可选依赖

11.Spring注入和依赖来源是否相同 ?

不相同,依赖查找的来源仅限于Spring BeanDefinition 以及单例对象;依赖注入的来源还包括 ResolvableDependency以及@Value所标注的外部化配置

12.单例对象能在Ioc容器启动后注册吗 ?

可以的,单例对象的注册于BeanDefinition不同,BeanDefinition会被ConfigurableListableBeanFactory#freezeConfiguration()方法影响,从而冻结注册,单例对象则没有这个限制

13.Spring依赖注入的来源有哪些 ?

Spring BeanDefinition

单例对象

  Resolvable Dependency

@Value 外部化配置

14.Spring内建的Bean作用域有几种 ?

  • singleton -- 默认单例 ☆
  • prototype -- 原型
  • request -- Web中使用
  • session
  • application
  • websocket

15.Spring 中 singleton Bean 是否在一个应用中是唯一的 ?

否, singleton bean 仅在当前Spring IoC 容器(Bean Factory)中是单例对象; 而BeanFactory可能存在父容器

16.Spring 中 BeanPostProcessor 的使用场景有哪些 ?

Spring 中 BeanPostProcessor 提供 Spring Bean 初始化前和初始化后的生命周期回调;分别对应 postProcessBeforeInitialization 以及 postProcessAfterInitialization 方法,允许对关心的 Bean 进行扩展,甚至替换。

其中 ApplicationContext 相关的 Aware 回调也是基于 BeanPostProcessor 实现,即 ApplicationContextAwareProcessor

17.Spring 中 BeanFactoryPostProcessor 与 BeanPostProcessor 的区别 ?

BeanFactoryPostProcessor 是 Spring BeanFactory(实际为 ConfigureableListableBeanFactory)的后置处理器,用于扩展 BeanFactory, 或通过 BeanFactory 进行依赖查找或依赖注入;

BeanFactoryPostProcessor 必须有 Spring ApplicationContext 执行,BeanFactory 无法与其直接交互;

BeanPostProcessor 则直接与 BeanFactory 关联,属于N对1的关系。

18.Spring 中 BeanFactory 是如何处理 Bean 的生命周期 ?

BeanFactory的默认实现为 DefaultListableBeanFactory,其中Bean生命周期与方法映射如下:

  • BeanDefinition 注册阶段 -- registerBeanDefinition
  • BeanDefinition 合并阶段 -- getMergedBeanDefinition
  • Bean 实例化前阶段 -- resolveBeforeInstantiation
  • Bean 实例化阶段 -- createBeanInstance
  • Bean 实例化后阶段 --populateBean
  • Bean 属性赋值前阶段 -- populateBean
  • Bean Aware 接口回调阶段 -- initializeBean
  • Bean 初始化前阶段 -- initializeBean
  • Bean 初始化阶段 -- initializeBean
  • Bean 初始化后阶段 -- initializeBean
  • Bean 初始化完成阶段 -- preInstantiateSingletons
  • Bean 销毁前阶段 -- destroyBean
  • Bean 销毁阶段 -- destroyBean

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • 浅谈HBase在SpringBoot项目里的应用(含HBaseUtil工具类)

    浅谈HBase在SpringBoot项目里的应用(含HBaseUtil工具类)

    这篇文章主要介绍了浅谈HBase在SpringBoot项目里的应用(含HBaseUtil工具类),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-10-10
  • Spring Cloud Feign实例讲解学习

    Spring Cloud Feign实例讲解学习

    这篇文章主要介绍了Spring Cloud Feign实例讲解学习,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-02-02
  • Java用文件流下载网络文件示例代码

    Java用文件流下载网络文件示例代码

    这篇文章主要介绍了Java用文件流的方式下载网络文件,大家参考使用吧
    2013-11-11
  • 高并发环境下安全修改同一行数据库数据的策略分享

    高并发环境下安全修改同一行数据库数据的策略分享

    随着互联网技术的发展,越来越多的应用需要在高并发环境中运行,数据库的并发控制成为了业务的关键,本文将介绍如何在高并发情况下,安全地修改数据库中的同一行数据,需要的可以参考一下
    2023-06-06
  • SpringBoot静态资源目录访问

    SpringBoot静态资源目录访问

    今天小编就为大家分享一篇关于SpringBoot静态资源目录访问,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-01-01
  • Java多线程4种拒绝策略小结

    Java多线程4种拒绝策略小结

    当线程池中的任务队列已满且无法再接受新的任务时,就需要采取拒绝策略来处理这种情况,本文主要介绍了Java多线程拒绝策略,包含了四种常见的拒绝策略,具有一定的参考价值,感兴趣的可以了解一下
    2024-03-03
  • Windows系统安装JDK小结

    Windows系统安装JDK小结

    这篇文章主要给大家详细介绍了Windows系统安装JDK的方法和步奏,十分的细致,有需要的小伙伴可以参考下
    2016-03-03
  • SpringBoot中熔断器的原理和使用详解

    SpringBoot中熔断器的原理和使用详解

    这篇文章主要介绍了SpringBoot中熔断器的原理和使用详解,熔断器是一种用于处理分布式系统中故障的设计模式,它可以防止出现故障的服务对整个系统造成连锁反应,需要的朋友可以参考下
    2023-07-07
  • java开发主流定时任务解决方案全横评详解

    java开发主流定时任务解决方案全横评详解

    这篇文章主要为大家介绍了java开发主流定时任务解决方案全横评详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-09-09
  • Java零基础讲解异常

    Java零基础讲解异常

    异常就是不正常,比如当我们身体出现了异常我们会根据身体情况选择喝开水、吃药、看病、等 异常处理方法。 java异常处理机制是我们java语言使用异常处理机制为程序提供了错误处理的能力,程序出现的错误,程序可以安全的退出,以保证程序正常的运行等
    2022-04-04

最新评论