史上最全Spring相关面试题(五)

点击上方 "JAVA开发大本营"关注, 置顶或星标一起学习

每天晚上10点00分, 我们不见不散

导读

小编将每天整理10道经典,系统化的面试题,让你进行学习。

每天鸡汤

不要去听别人的忽悠,你人生的每一步都必须靠自己的能力完成。自己肚子里没有料,手上没本事,认识再多人也没用。

责任编辑:涛哥

史上最全Spring相关面试题(五)

史上最全Spring相关面试题(五)

史上最全Spring相关面试题(一)

史上最全Spring相关面试题(二)

史上最全Spring相关面试题(三)

史上最全Spring相关面试题(四)

四十一、在Spring框架中如何更有效地使用JDBC? 

参考回答:

使用SpringJDBC 框架,资源管理和错误处理的代价都会被减轻。所以开发者只需写statements 和 queries从数据存取数据,JDBC也可以在Spring框架提供的模板类的帮助下更有效地被使用,这个模板叫JdbcTemplate (例子见这里here)

四十二、Spring支持的事务管理类型?

参考回答:

Spring支持两种类型的事务管理:

(1)编程式事务管理:这意味你通过编程的方式管理事务,给你带来极大的灵活性,但是难维护。

(2)声明式事务管理:这意味着你可以将业务代码和事务管理分离,你只需用注解和XML配置来管理事务。

四十三Spring框架的事务管理有哪些优点?

参考回答:

(1)它为不同的事务API  如 JTA,JDBC,Hibernate,JPA 和JDO,提供一个不变的编程模式。

(2)它为编程式事务管理提供了一套简单的API而不是一些复杂的事务API。

(3)它支持声明式事务管理。

(4)它和Spring各种数据访问抽象层很好的集成。

四十四、你更倾向用那种事务管理类型?

参考回答:

大多数Spring框架的用户选择声明式事务管理,因为它对应用代码的影响最小,因此更符合一个无侵入的轻量级容器的思想。声明式事务管理要优于编程式事务管理,虽然比编程式事务管理(这种方式允许你通过代码控制事务)少了一点灵活性。

四十五、Spring事务的配置有几种不同的方式

参考回答:

(1)每个Bean都有一个代理

(2)所有Bean共享一个代理基类

(3)使用拦截器

(4)使用tx标签配置的拦截器

(5)全注解

四十六、事务注解在类/方法上的优先级以及你对事务注解使用的一些建议。

参考回答:

如果在接口、实现类或方法上都指定了@Transactional 注解,则优先级顺序为:

方法>实现类>接口;

建议只在实现类或实现类的方法上使用@Transactional,而不要在接口上使用,这是因为如果使用JDK代理机制(基于接口的代理)是没问题;

而使用使用CGLIB代理(继承)机制时就会遇到问题,因为其使用基于类的代理而不是接口,这是因为接口上的@Transactional注解是“不能继承的”;

四十七、事务的回滚规则

参考回答:

默认只把RuntimeException及其子类标记为回滚,Error默认也导致回滚。Checked Exceptions默认不导致回滚。这些规则和EJB是一样的。

四十八、为何有时@Transactional不生效

参考回答:

只有@Transactional 注解应用到 public 方法,才能进行事务管理。

这是因为在使用 Spring AOP 代理时,Spring 在调用 TransactionInterceptor 在目标方法执行前后进行拦截之前,DynamicAdvisedInterceptorCglibAopProxy 的内部类)的 intercept 方法或 JdkDynamicAopProxyinvoke 方法会间接调用 AbstractFallbackTransactionAttributeSource(Spring 通过这个类获取@Transactional 注解的事务属性配置属性信息)的 computeTransactionAttribute 方法。

如果想在非public方法上生效,考虑使用AspectJ(织入方式)。

注意:即使你的方法是public的,但是如果被private的方法调用,@Transactional注解同样也会失效

四十九、Spring事务三要素


参考回答:

数据源:表示具体的事务性资源,是事务的真正处理者,如MySQL等。

事务管理器:像一个大管家,从整体上管理事务的处理过程,如打开、提交、回滚等。

事务应用和属性配置:像一个标识符,表明哪些方法要参与事务,如何参与事务,以及一些相关属性如隔离级别、超时时间等。

五十、逻辑事务与物理事务

参考回答:

事务性资源实际打开的事务就是物理事务,如数据库的Connection打开的事务。Spring会为每个@Transactional方法创建一个事务范围,可以理解为是逻辑事务。

在逻辑事务中,大范围的事务称为外围事务,小范围的事务称为内部事务,外围事务可以包含内部事务,但在逻辑上是互相独立的。每一个这样的逻辑事务范围,都能够单独地决定rollback-only状态。

那么如何处理逻辑事务和物理事务之间的关联关系呢,这就是传播特性解决的问题。

史上最全Spring相关面试题(五)

史上最全Spring相关面试题(五)

扫码关注最新动态

关键时刻,第一时间送达

史上最全Spring相关面试题(五)

- END -

点个在看是最大的支持 史上最全Spring相关面试题(五)