阿里大佬的Spring面试题知识点总结 (五)

120 阅读3分钟

这是我参与11月更文挑战的第15天,活动详情查看:2021最后一次更文挑战

阿里大佬的Spring面试题知识点总结 (五)

24. spring中用到哪些设计模式?

  1. 单例模式:spring中bean都是单例
  2. 工厂模式:BeanFactory
  3. 模板方法:postProcessorBeanFactory,onRefresh,
  4. 观察者模式:listener,event,multicast
  5. 适配器模式:Adapter
  6. 装饰着模式:BeanWrapper
  7. 责任链模式:使用aop的时候会有一个责任链模式
  8. 代理模式:aop动态代理
  9. 委托者模式:delegate
  10. 建造者模式:builder
  11. 策略模式:XmlBeanDefinitionReader,PropertiesBeanDefinitionReader

25.Spring Aop 的实现原理

Spring Aop 的实现原理是:动态代理

aop(Aspect Oriented Programing)是指面向切面编程,如果多个类中出现相同的代码,将这些相同的代码提取到父类中,AOP通过横向抽取机制为这类无法通过纵向继承体系进行抽象的重复性代码提供了解决方按。aop其实是ioc的一个扩展功能,先有的ioc,再有的aop,只是在ioc的整个流程中新增一个扩展点而已,因此aop是在BeanPostProcessor的后置处理方法中来实现的。

BeanPostProcessor方法中,通过jdk或者cglib来生成代理对象(JDK动态代理智能对实现了接口的类生成代理对象;cglib可以对任意类生成代理对象,它的原理是对目标对象进行继承代理,如果目标对象被final修饰,那么该类无法被cglib代理。如果被代理对象实现了接口,就优先使用JDK代理,如果没有实现接口,就用用cglib代理),再根据之前定义好的通知来生成拦截器链,从拦截器链中依次获取每一个通知开始执行。

26. Spring的事务是如何回滚的

总:
spring的事务是由aop来实现的,首先要生成具体的代理对象,然后按照aop的整套流程来执行具体的操作逻辑,正常情况下要通过通知来完成核心功能,但是事务不是通过通知来实现的,而是通过一个Transactionlnterceptor来实现的,然后调用invoke来实现具体的逻辑。

分:
1、先做准备工作,解析各个方法上事务相关的属性,根据具体的属性来判断是否开始新事务
2、当需要开启的时候,获取数据库连接,关闭自动提交功能,开起事务
3、执行具体的sql逻辑操作
4、在操作过程中,如果执行失败了,那么会通过completeTransactionAfterThrowng看来完成事务的回滚操作,回滚的具体逻辑是通过doRoback方法来实现的,实现的时候也是要先获取连接对象,通过连接对象来回滚。
image.png 5、如果执行过程中,没有任何意外情况的发生,那么通过commitTransactionAfterReturning来完成事务的提交操作,提交的具体逻辑是通过docommit方法来实现的,实现的时候也是要获取连接,通过连接对象来提交。
6、当事务执行完毕之后需要清除相关的事务信息cIeanupTransactionlnfo,同样也需要先获取连接对象来提交。这里要注意的是数据库事务的关闭连接,是对于某一个连接而言的