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
    评论
Spring是一个开源的Java框架,它提供了大量的功能和特性来简化Java应用程序的开发。下面我将分别解释iocaop的概念,并介绍一下aop的原理。 1. ioc(Inversion of Control,控制反转):iocSpring框架的核心概念之一。它通过将对象的创建、依赖关系管理对象的生命周期交给容器管理,实现了对象之间的解耦和灵活性。在传统的开发方式对象之间的创建和依赖关系需要由开发者手动管理,而在使用ioc容器后,只需要通过配置文件或注解来描述对象之间的依赖关系容器会负责创建和管理这些对象。 2. aop(Aspect-Oriented Programming,面向切面编程):aop是一种编程范式,它的目标是将程序的横切关注点(如日志记录、事务管理等)与核心业务逻辑分离开来,使得代码更具可维护性和可重用性。在Springaop可以通过使用代理模式和动态代理来实现。它可以在不修改原有代码的情况下,通过在特定的切点上织入切面逻辑,从而实现对横切关注点的控制和管理。 3. aop原理:Spring框架使用动态代理来实现aop。在运行时,Spring会根据配置或注解,动态地为目标对象一个代理对象,并将切面逻辑织入到目标对象的方法执行前、执行后或异常处理等关键点。代理对象在执行方法时,会自动触发切面逻辑的执行。这使得开发者可以专注于核心业务逻辑的编写,而无需关注横切关注点的处理。 总结:Spring框架通过iocaop的结合,实现了面向对象编程的灵活性和重用性,使得开发者能够更加专注于核心业务逻辑的开发。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值