一、Spring Bean的相关问题
1.1 Spring中的Bean,作用域有哪些?
首先呢,Spring 框架里面的IOC容器,可以非常方便的去帮助我们管理应用里面的Bean对象实例。我们只需要按照Spring里面提供的xml或者注解等方式去告诉IOC容器,哪些Bean需要被IOC容器管理就行了。其次呢,既然是Bean对象实例的管理,那意味着这些实例,是存在生命周期,也就是所谓的作用域。
理论上来说,常规的生命周期只有两种:
- singleton, 也就是单例,意味着在整个Spring容器中只会存在一个Bean实例。
- prototype,翻译成原型,意味着每次从IOC容器去获取指定Bean的时候,都会返回一个新的实例对象。
但是在基于Spring框架下的Web应用里面,增加了一个会话纬度来控制Bean的生命周期,主要有三个选择
- request, 针对每一次http请求,都会创建一个新的Bean
- session,以sesssion会话为纬度,同一个session共享同一个Bean实例,不同的session产生不同的Bean实例
- globalSession,针对全局session纬度,共享同一个Bean实例
二、spring事务的问题
2.1 Spring中事务的传播行为有哪些 ?
在Spring中,定义了7种事务传播行为。
- REQUIRED:默认的Spring事物传播级别,如果当前存在事务,则加入这个事务,如果不存在事务,就新建一个事务。
- REQUIRE_NEW:不管是否存在事务,都会新开一个事务,新老事务相互独立。外部事务抛出异常回滚不会影响内部事务的正常提交。
- NESTED:如果当前存在事务,则嵌套在当前事务中执行。如果当前没有事务,
则新建一个事务,类似于REQUIRE_NEW。 - SUPPORTS:表示支持当前事务,如果当前不存在事务,以非事务的方式执行。
- NOT_SUPPORTED:表示以非事务的方式来运行,如果当前存在事务,则把当前事务挂起。
- MANDATORY:强制事务执行,若当前不存在事务,则抛出异常.
- NEVER:以非事务的方式执行,如果当前存在事务,则抛出异常。
Spring事务传播级别一般不需要定义,默认就是PROPAGATION_REQUIRED,除非在嵌套事务的情况下需要重点了解。
