Spring面试
·
1. 对Spring的理解
Spring框架是一个轻量级的开源框架,是核心容器、数据访问与集成、AOP、Web、消息、测试六个模块的集成。
主要是为了简化企业级应用的后台开发,降低耦合性。平时接触到最多的还是IoC和AOP两个特性。IoC指的是控制反转,把对象的创建和依赖关系的维护交给Spring容器去管理。
Spring通过工厂模式、反射机制等技术管理对象的作用域和生命周期。AoP一般称为面向切面编程,是面向对象的一种补充,将程序中独立于其他功能的方法抽取出来,使Java开发模块化,仅需专注于主业务即可。
2.Spring的特点
MVC,IOC,AOP,事务管理。
3.SPring的优缺点?
优点
方便解耦,简化开发
可以将对象的创建和依赖关系的维护交给Spring管理。
提供面向切面编程,可以方便的实现对程序进行权限拦截、运行监控等功能。
声明式事务的支持
只需要通过配置就可以完成对事务的管理,而无需手动编程。
可以通过注解方便的测试程序。
内部提供了对各种优秀框架的直接支持,方便集成各种优秀框架。
降低 JavaEE API 的使用难度。
缺点
pring明明一个很轻量级的框架,却给人感觉大而全
Spring依赖反射,反射影响性能
使用门槛过高,入门Spring需要较长时间
4.Ioc的优点是什么?
把应用的代码量降到最低。
它使应用容易测试,单元测试不再需要单例和JNDI查找机制。
最小的代价和最小的侵入性使松散耦合得以实现。
IoC容器支持加载服务时的饿汉式初始化和懒加载。
5.Ioc的实现机制
反射和工厂模式。
6.Ioc支持哪些功能
依赖注入、依赖检查、自动装配、指定初始化和销毁的方法、回调。
7.什么是Spring的依赖注入
依赖注入是组件之间的依赖关系,由容器在应用系统运行期来决定,也就是由容器动态地将某种依赖关系的目标对象实例化,并注入到应用系统中的各个关联的组件之中。组件不做定位查询,只提供普通的Java方法让容器去决定依赖关系。
8. 解释对象/关系映射集成(ORM)模块
Spring 通过提供ORM模块,支持我们直接在JDBC 之上使用一个对象/关系映射(ORM)工具。
Spring 支持集成主流的 ORM 框架。
Spring 的事务管理同样支持主流的 ORM 框架及 JDBC。
9. Spring的web模块
Spring 的 WEB 模块是构建在 application context 模块基础之上,提供一个适合 web 应用的上下文。
10.Spring的配置文件
Spring 配置文件是个XML文件,这个文件包含了类信息,描述了如何配置它们,以及如何相互调用
11.Ioc
Ioc把传统上程序直接操控的对象调用权交给容器,由程序代码本身转移到了外部容器。
12.控制反转(IoC)的优点是什么?
把应用的代码量降到最低。
它使应用容易测试,单元测试不再需要单例和JNDI查找机制。
最小的代价和最小的侵入性使松散耦合得以实现。
IoC容器支持加载服务时的饿汉式初始化和懒加载。
13.Ioc实现机制
反射和工厂模式。
14.Spring 的 IoC支持哪些功能
依赖注入
依赖检查
自动装配
支持集合
指定初始化方法和销毁方法
支持回调某些方法
15.什么是 Spring Beans ?
Spring beans 是那些形成 Spring 应用主干的 java 对象,它们被 Spring IOC 容器初始化,装配,和管理,这些 beans 通过容器中配置的元数据创建。
16. 一个 Spring Bean 定义包含什么?
一个 Spring Bean 的定义包含容器必知的所有配置元数据,包括如何创建一个bean,它的生命周期详情及它的依赖。
17. 如何给 Spring 容器提供配置元数据?
XML 配置文件。
基于注解的配置。
基于 java 的配置。
18. 解释 Spring 支持的几种bean的作用域?
singleton作用域 : 是spring默认的作用域,bean 在每个 Spring ioc 容器中只有一个实例。
prototype作用域:一个 bean 的定义可以有多个实例,但该作用域谨慎使用,频繁创建和销毁会严重影响性能。
request作用域:每次 http 请求都会创建一个 bean, 该作用域仅在基于 web 的 Spring Application Context 情况下有效。
session作用域:在一个 HTTP Session 中,一个 bean 定义对应一个实例。该作用域仅在基于 web 的 Spring Application Context 情况下有效 。
global-session作用域:在一个全局的 HTTP Session 中,一个 bean 定义对应一个实例。该作用域仅在基于 web 的 Spring Application Context 情况下有效。
19. Spring 框架中的单例 bean是线程安全的吗?
Spring 框架中的单例 bean 不是线程安全的,spring 中的 bean 默认是单例模式,Spring框架并没有对单例 bean 进行多线程的封装处理。实际上大部分时候 spring bean 是无状态的(比如 dao类),某种程度上来说 bean 也是安全的,但如果 bean 有状态的话(比如 view model 对象),那就要开发者自己去保证线程安全了。最简单的就是改变 bean 的作用域,把“singleton”变更为“prototype”,这样请求 bean 相当于 new Bean()了,就可以保证线程安全了。