简述AOP和IOC

spring做为业界广泛应用的,没有之一的框架,其核心思想我们有必要去了解一番。
spring的三大核心思想分别为:AOP(面向切面编程)、IOC(控制反转)、DI(依赖注入)

AOP

AOP全称Aspect oriented programming,即面向切面编程。在解释什么是面向切面之前,我们先来设想这样一个业务场景:项目老旧,现在要新增功能,要求系统内所有查询记录参数和结果集大小。我们首先pass的方案就是修改所有的查询方法,在方法体内部新增逻辑。这个方案太笨,程序员的座右铭应该不造重复的轮子。回到这个业务场景,首先可以想到的是记录参数和结果集大小是重复代码,可以向上提取为m1()方法,自然而然的在m1()中调用查询方法即可完成功能。这就是面向切面的雏形,譬如m1()这样的重复代码,我们一般称之为横切逻辑代码,横切逻辑代码前后环绕将查询方法包围起来,将重复代码横向抽取,把横切逻辑代码和业务逻辑代码分开这就是面向切面编程,最主要的就是可以在不改变原有业务逻辑的情况下,增强横切逻辑代码,根本上解耦合,避免横切逻辑代码重复。

spring中AOP的实现借助于动态代理,分两种jdk和cglib:

  • 在代理类有实现的接口时,使用jdk自带的invocationHander接口去实现
  • 在代理类未实现任何接口时,使用cglib去实现

IOC

IOC全称Inversion of control,即控制反转。如果现在有两个类a和b,a依赖于b,在传统开发中,我们会在a中new去创建b的实例,而在spring项目中,不在new而是直接从容器存取b的实例,将实例的管理交给容器。显而易见在spring项目中在创建a、b两个类的实例时不在有直接的关联,将类和类的依赖关系交给容器管理,这就是控制反转。
IOC是一种思想,在sping中IOC的实现就是DI(Dependency Injection),即依赖注入。类之间的依赖关系由容器在应用系统运行期来决定, 也就是由容器动态地将某种依赖关系的目标对象实例注入到应用系统中的各个关联的组件之中

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值