90.为什么要使用 spring?
1.方便解耦,简化开发,使用spring的IOC容器,将对象之间的依赖关系交给Spring,更专注于应用逻辑
2.Spring就是一个大容器,可以将所有对象创建和依赖关系维护,交给sprin g管理
3.对主流框架有很好的集成支持,如Hibernate,Struts2,JPA等
4.Spring提供面向切面编程,可以方便的实现对程序进行权限拦截,运行监控等功能
5.高度可开放性,不强制依赖于Spring,开发者可以自由选择Spring部分或全部
91.解释一下什么是 aop?
面向切面编程,利用横切的技术,将影响多个类的公共行为封装到一个可重用模块,将其命名为“Aspect”,可以减少系统的重复代码,降低模块间的耦合度
92.解释一下什么是 ioc?
借助于“第三方”实现具有依赖关系的对象之间的解耦,如果不使用IOC容器,对象A依赖于对象B,当对象A初始化或者运行到某一点的时候,自己必须主动去创建对象B或者使用已经创建的对象B,无论是创建还是使用对象B,控制权都在自己手上。引入IOC容器之后,对象A与对象B失去了直接联系,当对象A运行到对象B的时候,IOC容器会主动创建一个对象B注入到对象A需要的地方
93.spring 有哪些主要模块?
Data Access/Integration 数据访问/集成
Web
AOP 面向切面
工具
消息
测试模块
94.spring 常用的注入方式有哪些?
Spring通过DI(依赖注入)实现IOC(控制反转),通常注入方式有三种:
1.构造方法注入
2.setter注入
3.基于注解的注入
95.spring 中的 bean 是线程安全的吗?
Spring容器中的Bean是否线程安全,容器本身没有提供Bean的线程安全策略,可以说Spring容器中的Bean本身不具备线程安全的特性,但是具体还是要结合具体scope的bean进行研究
96.spring 支持几种 bean 的作用域?
Spring支持5种作用域,默认使用prototype:
singleton:单例模式,通过singleton定义的Bean将只有一个实例
prototype:原型模式,通过getBean方法获取prototype定义的Bean时,都将产生一个新的Bean实例
request: 对于每次Http请求,使用request定义的Bean都会产生一个新实例,即每次Http请求都会产生不同的Bean实例,只有在web应用中使用Spring时,该作用域才会有效。
session: 对于每次Http Session,使用session定义的Bean都将产生一个新实例。同样只有在Web应用中使用Spring时,该作用域才有效。
globalsession: 每个全局的HTTP Session,使用session定义bean豆浆产生一个新实例。典型情况下,只有在使用portlet context 的时候才有效,同样只有在web使用spring时,该作用域才有效。
97.spring 自动装配 bean 有哪些方式?
spring中bean装配有两种方式:
隐式的bean发现机制和自动装配
在java代码或者xml中进行显示配置
98.spring 事务实现方式有哪些?
1.编程式事务管理对基于POJO的应用来说是唯一选择。需要在代码中调用beginTransaction(), commit(), rollback()等事务管理相关的方法,这就是编程式事务管理。
2.基于TransactionProxyFactoryBean的声明式事务管理
3.基于@Transactional的声明式事务管理
4.基于Aspectj AOP 配置事务
99.说一下 spring 的事务隔离?
事务隔离级别指的是一个事务对数据的修改与另一个并行的事务的隔离程度,当多个事务同时访问相同数据是,如果没有采取必要的隔离机制,就可能发生 脏读,幻读,不可重复读的问题
100.说一下 spring mvc 运行流程?
1.用户向服务端发送请求,请求被Spring前端控制servlet DispatcherServlet 捕获;
2.DispatcherServlet对请求URL进行解析,得到请求资源标识符后根据该URI,调用HandlerMapping获得该Handler配置的所有相关的对象,以HandlerExecutionChain对象的形式返回
3.DispatcherServlet根据获得的Handler,选择合适的HandlerAdapter;
4.提取Request中的模型数据,填充Handler入参,开始执行Handler(Controller)。填充Handler的入参过程中,根据你的配置,Spring将做一些额外的工作:
HttpMessageConveter: 将请求消息转换成一个对象,将对象转换为指定的响应信息
数据转换: 对请求消息进行数据转换。
数据根式化: 对请求消息进行数据格式化。
数据验证: 验证数据的有效性,验证结果存储到BindingResult或者Error中
5.Handler执行完成后,想DispatcherServlet返回一个ModelAndView对象
6.根据返回的ModelAndView,选择一个合适的ViewReslover
7.ViewResolver结合Model和view ,来渲染视图
8.将渲染结果返回给客户端
101.spring mvc 有哪些组件?
DispathcerServlet: 中央控制器,把请求的转发到具体的控制类
Controller: 具体处理请求的控制器
HandlerMapping: 映射处理器,负责映射中央处理器转发给controller的映射策略
ModelAndView: 服务层返回的数据和视图层的封装类
ViewResolver: 视图解析器,解析具体的视图
Interceptors: 拦截器,负责拦截我们定义的请求然后做处理工作
102.@RequestMapping 的作用是什么?
RequestMapping是一个用来处理地址映射的注解,可用于类或方法上,用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径
103.@Autowired 的作用是什么?
Autowired可以对类成员变量,方法及狗仔函数进行标注,完成自动装配的工作。通过@Autowired的使用来消除set,get方法