spring中ioc容器与aop之间的关系

8 篇文章 0 订阅
2 篇文章 0 订阅

spring中ioc容器与aop之间的关系

​ spring的ioc 容器中默认都是原生对象,只有通过aop增强的对象才是代理对象。
配置了aop的类或者类中方法上有@Transactional注解的(因为@Transactional注解的原理就是基于aop的)。

​ 当出现了aop增强,在ioc容器当中的对象是代理的对象,但里面的属性对象为null,

代理对象如何调用该对象中的方法呢?

​ 使用的生成代理对象之前的target对象,该对象里面其他对象属性就有值,不会出现空指针,

问题1:

自身调用问题导致事务失效

​ 因为调用方法时用的是target对象,并不是代理对象,所以并不会被方法增强。

​ 解决:

​ 使用代理对象调用(注入自身对象进行方法调用,或者aspectJ从ioc中获取)

问题2:

空指针问题

描述,在有方法增强的对象调用的情况下,进行ioc中的代理对象调用,如果调用的方法是private的,则在该方法当中使用的其他对象会出现空指针的情况。
使用的是代理对象调用是时,使用的也是原有的target对象进行调用,但是实在外部调用,所以spring框架就在调用方法不为public的情况返回了null,所以出现了空指针。但如果该方法是public,这表明该方法是可以被外部调用到的,就不会空指针(具体可看代理对象调用过程)。

问题3:

有aop增强与没有对象增强的注入到ioc中的区别

​ spring的ioc 容器中默认都是原生对象,通过aop增强的对象ioc保存的是代理对象。

4.bean的生命周期

bean -->对象

对象类----->无参构造方法(实例化)推断构造方法------->对象------>依赖注入---->初始化前(@PostConstruct)-------->初始化(InitializingBean) ---->初始化后(AOP)------->代理对象 ----->bean

有增强时的情况属性为null

在这里插入图片描述
方法:

在这里插入图片描述
https://www.bilibili.com/video/BV1dy4y1u7pB?p=6

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值