1.Spring 框架有哪些主要模块?
截止到目前Spring 框架已集成了 20 多个模块 。 这些模块主要被分如下图所示的核心容器 、数据访问 / 集成 、Web、AOP (面向切面编程) 、工具 、消息和测试模块 。
2.什么是依赖注入?什么是控制反转(IOC)? 在 Spring 中,有几种依赖注入方式?
依赖注入是在编译阶段尚未知所需的功能是来自哪个的类的情况下,将其他对象所依赖的功能对象实例化的模式。
在传统的编程方式中,业务逻辑的流程是由应用程序中的早已被设定好关联关系的对象来决定的。在使用控制反转的情况下,业务逻辑的流程是由对象关系图来决定的,该对象关系图由装配器负责实例化,这种实现方式还可以将对象之间的关联关系的定义抽象化。而绑定的过程是通过“依赖注入”实现的。
注入方式:
* 构造器注入
* Setter方法注入
* 接口注入
3.在 Spring 中,有几种配置 Bean 的方式?
基于XML的配置
基于注解的配置
基于Java的配置
4.请解释一下 Spring Bean 的生命周期?
在一个Spring bean factory 负责管理在 spring 容器中被创建的 bean 的生命周期 。Bean 的生命周期由两组回调(call back)方法组成 。
初始化之后调用的回调方法。
销毁之前调用的回调方法。
Spring 框架提供了以下四种方式来管理 bean 的生命周期事件:
* InitializingBean 和 DisposableBean 回调接口
* 针对特殊行为的其他 Aware 接口
* Bean 配置文件中的 Custom init() 方法和 destroy() 方法
* @PostConstruct 和 @PreDestroy 注解方式
5.Spring Bean 有哪些作用域,它们之间有什么区别?
singleton :这种 bean 范围是默认的,这种范围确保不管接受到多少个请求,每个容器中只有一个 bean 的实例,单例的模式由 bean factory 自身来维护 。
prototype :原形范围与单例范围相反,为每一个 bean 请求提供一个实例 。
request :在请求 bean 范围内会每一个来自客户端的网络请求创建一个实例,在请求完成以后, bean 会失效并被垃圾回收器回收 。
Session :与请求范围类似,确保每个 session 中有一个 bean 的实例,在 session 过期后, bean 会随之失效 。
global-session : global-session 和 Portlet 应用相关 。 当你的应用部署在 Portlet 容器中工作时,它包含很多 portlet。 如果你想要声明让所有的 portlet 共用全局的存储变量的话,那么这全局变量需要存储在 global-session 中 。
6.Spring 框架中的单例 Beans 是线程安全的么?
实际上,大部分的 Spring bean 并没有可变的状态 ( 比如 Service 类和 DAO 类 ) ,所以在某种程度上说 Spring 的单例 bean 是线程安全的 。 如果你的 bean 有多种状态的话(比如 View Model 对象),就需要自行保证线程安全 。
标签:Java,实例,Spring,Bean,面试,bean,session,注入 From: https://blog.51cto.com/u_15558311/6494150