- 为什么要使用 spring?
1.方便解耦,便于开发
2.spring支持aop编程
3.声明式事务的支持
4.方便程序的测试,spring 对junit4支持
5.方便集成各种优秀的框架
6.降低javaEE API的使用难度 - 解释一下什么是 aop?
AOP(Aspect-Oriented Programming)指一种程序设计范型,该范型以一种称为切面(aspect)的语言构造为基础,切面是一种新的模块化机制,用来描述分散在对象、类或方法中的横切关注点 - 解释一下什么是 ioc?
IoC就是Inversion of Control,控制反转。在Java开发中,IoC意味着将你设计好的类交给系统去控制,而不是在你的类内部控制。这称为控制反转 - spring 有哪些主要模块?
Spring AOP、Spring ORM、Spring Core 、Spring Dao、Spring Context 、Spring Web 、Spring MVC - spring 常用的注入方式有哪些?
构造器注入、接口注入、方法参数注入 - spring 中的 bean 是线程安全的吗?
Spring容器中的Bean是否线程安全,容器本身并没有提供Bean的线程安全策略。
大部分的Spring bean并没有可变的状态,所以在某种程度上说Spring的单例bean是线程安全的。如果你的bean有多种状态的话,就需要自行保证线程安全。 - spring 支持几种 bean 的作用域?
singleton:单例模式
prototype:原型模式
request:对于每次HTTP请求
session:对于每次HTTP Session
globalsession:每个全局的HTTP Session - spring 自动装配 bean 有哪些方式?
在 XML 文件中显式配置
在 Java 的接口和类中实现配置
隐式 Bean 的发现机制和自动装配原则 - spring 事务实现方式有哪些?
(1)编程式事务管理对基于 POJO 的应用来说是唯一选择。我们需要在代码中调用beginTransaction()、commit()、rollback()等事务管理相关的方法,这就是编程式事务管理。
(2)基于 TransactionProxyFactoryBean的声明式事务管理
(3)基于 @Transactional 的声明式事务管理
(4)基于Aspectj AOP配置事务 - 说一下 spring 的事务隔离?
隔离性 (isolation):一个事务执行的过程中,不应该受到其他事务的干扰
ISOLATION_DEFAULT:使用后端数据库默认的隔离级别。
ISOLATION_READ_UNCOMMITTED:允许读取尚未提交的更改。可能导致脏读、幻影读或不可重复读。
ISOLATION_READ_COMMITTED:允许从已经提交的并发事务读取。可防止脏读,但幻影读和不可重复读仍可能会发生。 - 说一下 spring mvc 运行流程?
1.用户发送请求至前端控制器DispatcherServlet
2.DispatcherServlet收到请求调用处理器映射器HandlerMapping。
3.处理器映射器根据请求url找到具体的处理器,生成处理器执行链HandlerExecutionChain(包括处理器对象和处理器拦截器)一并返回给DispatcherServlet。
4.DispatcherServlet根据处理器Handler获取处理器适配器HandlerAdapter执行HandlerAdapter处理一系列的操作,如:参数封装,数据格式转换,数据验证等操作
5.执行处理器Handler(Controller,也叫页面控制器)。
6.Handler执行完成返回ModelAndView
7.HandlerAdapter将Handler执行结果ModelAndView返回到DispatcherServlet
8.DispatcherServlet将ModelAndView传给ViewReslover视图解析器
9.ViewReslover解析后返回具体View
10.DispatcherServlet对View进行渲染视图(即将模型数据model填充至视图中)。
11.DispatcherServlet响应用户。 - spring mvc 有哪些组件?
HandlerMapping、HandlerAdapter、HandlerExceptionResolver、ViewResolver、RequestToViewNameTranslator、LocalResolver、ThemeResolver、MultipartResolver、FlashMapManager - @RequestMapping 的作用是什么?
@RequestMapping 是一个用来处理请求地址映射的注解,可以作用在类上,代表该类的所有方法的父路径,作用在方法上,代表具体的请求路径.被该注解修饰的方法会将返回值当做跳转路径,当使用异步请求的时通常我们会加上@ResponseBody注解将返回内容加入到HTTP response Body中进行返回 - @Autowired 的作用是什么?
@Autowired默认按类型装配(这个注解是属业spring的),默认情况下必须要求依赖对象必须存在,如果要允许null值,可以设置它的required属性为false