Spring/Spring MVC
1.为什么要使用Spring?
Spring提供了IOC技术,容器会帮你管理依赖的对象,从而不需要自己创建和管理依赖对象,更轻松的实现程序的解耦。
Spring提供了事务支持,使得事务操作变得根据方便。
Spring提供了AOP(面向切面编程),这样可以更方便的处理某一类问题。
更方便的框架集成,Spring可以很方便的集成其他框架,比如Mybatis、Hibernate等。
2.什么是AOP?
AOP是面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。
3.什么是IOC?
IOC就是控制反转,是Spring的核心,对于Spring框架来说,就是由Spring来负责控制对象的生命周期和对象间的关系。
简单的说,控制指的是当前对象对内部成员的控制权,控制反转指的是,这种控制权不由当前对象管理了,由其他(类,第三方容器)来管理。
4.Spring有哪些主要模块?
Spring core:框架的最基础部分,提供IOC和依赖注入特性。
Spring context:构建于core封装包基础上的context封装包,提供了一种框架式的对象访问方法。
Spring dao:Data Access Object提供了JDBC的抽象层。
Spring web:提供了针对web开发的集成特性,例如文件上传,利用servlet listeners进行IOC容器初始化和针对web的ApplicationContext。
Spring web mvc:Spring中的MVC封装包提供了web应用的Model-View-Controller的实现。
5.Spring有哪些常用的注入方式?
setter属性注入。
构造方法注入。
注解方式注入。
6.Spring中bean是线程安全的吗?
Spring中的bean默认是单例模式,spring框架并没有对单例bean进行多线程的封装处理。
实际上大部分时候Spring bean无状态的(比如dao类),所以某种程度上bean也是安全的,但如果bean有状态的话(比如view model对象),那就要开发者自己去保证线程安全了,最简单的就是改变bean的作用域,把singleton变更成prototype,这样请求bean相当于new bean了,所以就可以保证线程安全。
有状态就是有数据存储功能。
无状态就是不会保存数据。
7.Spring支持几种bean的作用域?
Spring支持五种作用域:
- singleton:Spring Ioc容器中只存在一个bean实例,bean以单列模式存在,默认值。
- prototype:每次从容器调用bean时都会创建一个新的实例,即每次getBean()相当于执行New Bean()操作。
- Web环境的作用域:
- request:每次http请求都会创建一个bean。
- session:同一个http session共享一个bean实例。
- global-session:用于portlet容器,因为每个portlet有单独的session,globalsession提供一个全局性的http session。
8.Spring自动装配bean有哪些方式?
no:默认值,表示没有自动装配,应使用显式bean引用进行装配。
byName:根据bean的名称注入对象依赖项。
byType:根据类型注入对象依赖项。
构造函数:通过构造函数来注入依赖项,需要设置大量的参数。
autodetect:容器首先通过构造函数使用autowire装配,如果不能,则通过byType自动装配。
9.Spring事务实现方式有哪些?
有两种实现方式:
- 声明式事务:声明式事务也有两种实现方式,基于xml配置文件的方式和注解方式(在类上添加@Transaction 注解)。
- 编码方式:通过编码的形式管理和维护事务。
10.说一下Spring的事务隔离?
脏读:表示一个事务能够读取另一个事务中还未提交的数据。
不可重复读:表示一个事务内,多次读取同一数据。
幻读:表示同一事务内多次读取返回的结果集不一样。
Spring有五大事务隔离级别:
- ISOLATION_DEFAULT:默认值,用底层数据库的设置隔离级别,数据库设置的是什么就用什么。
- ISOLATION_READ_UNCOMMITTED:未提交读,最低隔离级别、事务未提交前,就可以被其他事务读取(会出现幻读、脏读、不可重复读)。
- ISOLAITON_READ_COMMITTED:提交读,一个事务提交后才能被其他事务读取到(会造成幻读、不可重复读),sql server的默认级别。
- ISOLAITON_REPEATABLE_READ:可重复读,保证多次读取同一数据时,其值都和事务开始时候的内容是一致,禁止读取到别的事务未提交的数据(会造成幻读),mysql的默认级别。
- ISOLAITON_SERIALIZABLE:序列化,代价最高最可靠的隔离级别,该隔离级别能防止脏读、不看重复读、幻读。
11.说一下Spring MVC运行流程?
- Spring mvc将请求发送给DispatcherServlet(前置控制器)。
- DispatcherServlet(前置控制器)查询HandlerMapping(映射控制器),找到处理请求的Controller(处理器)。
- DispatcherServlet(前置控制器)再把请求提交到对应的Controller(处理器)。
- Controller(处理器)进行业务逻辑处理后,会返回一个ModelAndView(模型和视图)。
- DispatcherServlet(前置控制器)查询ViewResolver(视图解析器),找到ModelAndView(模型和视图)对象指定的视图对象。
- 视图对象渲染并返回给客户端。
12.Spring MVC有哪些组件?
前置控制器DispatcherServlet。
映射控制器HandlerMapping。
处理器Controller。
模型和视图ModelAndView。
视图解析器ViewResolver。
13.@RequestMapping的作用是什么?
将http请求映射到相应的类或者方法上。
14.@Autowired的作用是什么?
@Autowired注解它可以对类成员变量、方法、构造函数进行标注,完成自动装配的工作,通过@Autowired注解的使用来消除get、set方法。