SpringFramework常见⾯试题
Spring Framework 常见⾯试题
1.什么是Spring Framework ?
Spring Framework 是⼀个提供了完整性的编程或配置⼀个现代化的基于JAVA的企业应⽤,各种基础设施的⽀持。
参见官⽅():
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则提供了单⼀类型、集合类型以及层次性等多种依赖查⽅式;
Bean 操作是否线程安全?
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 -- 默认单例☆
spring framework面试题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
命名空间所属模块
Schema 资源 URL beans
spring-beans /schema/beans/spring-beans.xsd context
spring-context /schema/context/spring-context.xsd aop
spring-aop /schema/aop/spring-aop.xsd tx
spring-tx /schema/tx/spring-tx.xsd util
spring-beans /schema/util/spring-util.xsd tool
spring-beans /schema/tool/spring-tool.xsd 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
19.Spring 内建的 XML Schema 常见有哪些 ?
20.Spring 配置元信息具体有哪些?
Bean 配置元信息,定义⽅式包括 XML 、Properties 、Annotation
IoC 容器配置元信息,通过 XML 、Properties 、Annotation ⽅式 配置控制 IoC 容器⾏为,⽐如注解驱动、AOP 等外部化配置,通过资源抽象 Properties 、YAML 控制 PropertySource
Spring profile 通过 外部化配置,提供条件分⽀流程
/schema/beans/spring-beans.xsd
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论