1、Spring怎样定义类的作用域
通过bean 定义中的scope属性来定义。
2、Spring支持的几种bean的作用域
支持以下五种bean的作用域:
singleton : bean在每个Spring ioc 容器中只有一个实例。(缺省默认)
prototype:一个bean的定义可以有多个实例。
request:每次http请求都会创建一个bean,该作用域仅在基于web的Spring ApplicationContext情形下有效。
session:在一个HTTP Session中,一个bean定义对应一个实例。该作用域仅在基于web的Spring ApplicationContext情形下有效。
global-session:在一个全局的HTTP Session中,一个bean定义对应一个实例。该作用域仅在基于web的Spring ApplicationContext情形下有效。
3、Spring支持的事务管理类型
编程式事务管理:这意味你通过编程的方式管理事务,给你带来极大的灵活性,但是难维护。
声明式事务管理:这意味着你可以将业务代码和事务管理分离,你只需用注解和XML配置来管理事务。
4、什么是控制反转(IOC)?什么是依赖注入?
控制反转(IOC) : 传统应用程序是由我们自己在对象中主动控制去直接获取依赖对象,现在由容器帮我们查找及注入依赖对象,对象只是被动的接受依赖对象,所以是控制反转。
依赖注入:组件之间依赖关系由容器在运行期决定,形象的说,即由容器动态的将某个依赖关系注入到组件之中。通过依赖注入机制,我们只需要通过简单的配置,而无需任何代码就可指定目标需要的资源,完成自身的业务逻辑,而不需要关心具体的资源来自何处,由谁实现。
实现方式:构造器注入、Setter方法注入、接口注入。注解装配在默认情况下是不开启的,为了使用注解装配,我们必须在Spring配置文件中配置 <context:annotation-config/>元素。
5、Spring由几大核心组件?
a、Bean 组件
b、Context 组件
c、Core 组件
6、Spring MVC核心工作流程 ?
a、用户向服务器发送request请求,请求被SpringMVC中央控制器DispatcherServlet捕获;
b、DispatcherServlet对请求URL进行解析,得到请求资源标识符(URI)。然后根据该URI,调用HandlerMapping映射处理器,将请求发送给指定的Controller。
c、 Controller执行完成后,将返回的数据信息封装到ModelAndView对象中,最后通过ViewResolver视图解析器选择一个合适的View 渲染视图返回界面。
7、spring事务隔离级别(五种面试最好全部说出来)
a、DEFAULT 这是一个PlatfromTransactionManager默认的隔离级别,使用数据库默认的事务隔离级别.
b、未提交读(read uncommited) : 脏读,不可重复读,虚读都有可能发生 。是最低的事务隔离级别,它允许另外一个事务可以看到这个事务未提交的数据。
c、已提交读 (read commited): 避免脏读。但是不可重复读、虚读有可能发生 。保证一个事物提交后才能被另外一个事务读取。另外一个事务不能读取该事物未提交的数据。Oracle 默认
d、可重复读 (repeatable read): 这种事务隔离级别可以防止脏读,不可重复读。但是可能会出现幻象读。它除了保证一个事务不能被另外一个事务读取未提交的数据之外还避免了以下情况产生(不可重复读)。Mysql 默认
e、串行化的 (serializable) : 这是花费最高代价、效率差但最可靠的事务隔离级别。事务被处理为顺序执行。除了防止脏读,不可重复读之外,还避免了幻象读(避免三种)。
8、Spring事务特性(四种面试最好全部说出来)
a、原子性 (atomicity): 一个事务中所有对数据库的操作是一个不可分割的操作序列,要么全做要么全不做。
b、一致性 (consistency): 事务的执行的前后数据的完整性保持一致.
c、隔离性 (isolation): 一个事务执行的过程中,不应该受到其他事务的干扰
d、持久性(durability) : 一个事物一旦提交,它对数据库的改变就是永久的
9、Spring事务七个传播特性(七种面试说一两个即可)
a、Propagation.REQUIRED (默认) 面试必须说出来这个。
调用方已经存在事务,则加入到同一个事务中运行,否则,自启一个事务
b、Propagation.REQUIRES_NEW
无论何时自身都会开启新事务
c、Propagation.SUPPORTS
调用方存在事务,则加入到同一个事务中运行,若不存在事务,则以非事务的方式运行
d、Propagation.NOT_SUPPORTED
调用方存在事务,则会被挂起,直到被调用方运行完毕后,事务恢复。
e、Propagation.MANDATORY
调用方存在事务,则加入到同一个事务中运行,若不存在,则抛出异常
f、Propagation.NEVER
调用方存在事务,则抛出异常
g、Propagation.NESTED
若调用方存在事务,则运行一个嵌套事务,若调用方不存在事务,则以Propagation.REQUIRED的方式运行,即开启一个新的事务
10、简述Spring Bean的生命周期
实例化、初始化、使用、销毁。
关键词:BeanFactoryPostProcessor 、BeanPostProcessor 、init-method/destroy-method