Spring 容器的自问自答,个人回顾

Spring 中 IOC 和 AOP 的理解?

Spring 是Spring体系中的一个基石,它实现了IOC(控制反转)和AOP(面向切面编程),与IOC配合的还有DI(注入),IOC是一个容器管理的概念,其中包含了容器和对容器中对象的生命周期的管理,当IOC创建时会基于xml或者其它配置信息去获取类的完整类名,通过反射机制对类对象的创建和初始化,并且加入到容器中,Spring的容器本质就是多个Map集合,包括:bean名称对实例,bean名称对类型,所有bean名称等。

AOP是面向切面,利用动态代理为实现方式,对容器中的bean对象的扩展,IOC容器中实际存在的也是基于AOP代理之后的类。

AOP 的面向切面拥有:前置、后置、异常返回、方法结束、环绕通知

public void transaction () {
        try{
            // Before  前置
			// 业务代码....
            // afterreutrn  方法结束
        }catch (Exception e) {
            // returnThrow  异常返回
        }finally {
            // after  后置
        }
    }

环绕通知是一个比较特殊的 切面,它本身包含多个AOP切面,本身就是动态代理的DIY实现方法,开发者在环绕通知中可以灵活的配置代理位置,同时环绕通知对比其它切面是可以改变返回值的(无论结果是什么),如果返回值被改变了那么后续可能会出现错误的返回值。

细节:AOP面向切面 如果同时配置了多个切面,那么多个切面都会执行,但是会有先后顺序,如图:

image-20210524100006957

当同时拥有多个切面时,可以基于order 注解去配置切面的优先级,否则是用切面的,**我记得是 利用切面定义的名称首字母排序。**然后上图,第一个切入的最后一个出来,如果出现了环绕通知,那么情况比较特殊,切面中包含 前置,而环绕通知本身就是一个利用反射调用方法的通知:

  1. 环绕通知先执行
  2. 前置通知
  3. 调用服务方法
  4. 后置通知
  5. 后置返回通知/后置异常通知

Spring 中 ApplicationContext 和 BeanFactory 的区别?

ApplicationContext 继承于 BeanFactory,属于BeanFactory的扩展,BeanFactory 用于对bean对象的创建和管理如获取等操作。而ApplicationContext 是对 BeanFactory 之外进行的扩展,BeanFactory当获取Bean的时候 如果容器中存在则 获取Bean,如果不存在则创建Bean,并且添加到IOC容器中。而ApplicationContext 是当对 该类创建和初始化时,会基于对bean的配置全部读取并调用BeanFactory的getBean() 逻辑同上。

BeanFactory 节省空间,ApplicationContext 不使用的也会加载。

细节:ApplicationContext 初始化 只会加载单例并且非抽象的方法

Spring 的事务?

Spring 的事务基于 AOP的,service对象 被 动态代理包装之后存放于IOC容器中,事务的本质实际上是用到了Spring AOP的概念,利用切面将 Java 中对数据库的操作封装起来,当出现异常时调用后置异常通知进行事务的回滚,前置处理器开启事务,方法正常结束提交事务。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值