前言

在拉勾教育Java高薪训练营再次学习了spring,再次感叹spring的核心思想。强调一下,IOC和AOP是一个技术思想(理论),并不是spring提出的,spring在技术层次把这两个思想做了⾮常好的实现(Java)。正是spring的优秀使得java繁荣起来,轻量,低耦合,简单,易扩展等。

什么是IOC

Inversion of Control (控制反转/反转控制),指的是关于对象的创建和管理的控制权反转了

  • 传统开发方式:自己在一个类中通过new得到另外一个类的实例对象
  • IOC思想:由外部环境实例化放到容器中(spring框架、IOC容器)

那么控制反转有什么好处呢?

解耦:与接口编程同时使用时,依赖别人者不会因被依赖者改变而改变,达到了高度的松耦合

什么是AOP

OOP概念:面向对象程序设计(Object Oriented Programming)

AOP概念:⾯向切⾯编程( Aspect oriented Programming )

AOP是OOP的延续,从OOP说起,OOP是利用继承和多态来实现代码的复用,是一种垂直的复用。那么如果需要在每个方法中都需要加入前置和后置处理,比如事务管理,日志,权限等通用的代码该如何复用呢?即使是抽取了公共方法,仍然需要在每个方法的前后增加重复代码。也就是说要实现原有方法业务内容不变,前后进行增强的模式,也就是代理模式

于是横向方法重复逻辑代码被抽取,并且使得增加的逻辑和业务逻辑解耦。代理模式真的是好强大,使得你在写逻辑代码和调用的时候没有感知到我对其做了统一的增强。它是它,但它已经不是它了。。。

那AOP就是使用了动态代理模式来实现的。其中如果有实现接口就使用jdk动态代理,如果没有实现接口就使用cglib动态代理,这样说可能有些绕,实际上的这里理解实现接口是implements这个java关键字,这样结合代码就更容易理解了。

动态代理梳理

spring的aop动态代理有jdk和cglib两种实现方式,那么他们之间的区别是什么呢。首先我们应该来看如何实现代理。

我们如何实现代理

代理就是对原有方法进行增强,即改变方法的内容实现,那么如何改变原有方法?在java里可以通过重写Override来实现,那么有几种重写的思路:

  • 接口:原有方法实现了接口,我也写一个类实现接口,方法重写,在内容中回调原有方法,并在回调前后进行增强。
  • 继承:父类实现了方法,我编写一个子类重写父类的方法,同样在内容中回调原有方法(保证原有业务逻辑不变),并在回调前后进行增强。

也就是说可以有接口,也可以没有接口,这就是jdk动态代理和cglib动态代理的区别,就是动态代理的两种实现方案,当然还有其他的动态代理实现方案,其实现无非还是对原有方法的重写(只不过重写的时机方案不同),将重写部分在代理类中实现,当使用时返回的其实是代理类,就可以无感知的对所有方法进行横向增强,解决增强逻辑和业务实现的耦合问题。不得不说,代理模式真的是太强大了,在各个框架中,比如mybatis和spring均使用了动态代理和反射机制从而达到通用的实现。

小马哥spring编程核心思想_Spring核心思想理解相关推荐

  1. 笔记-小马哥 Spring编程思想笔记

    小马哥 Spring编程思想笔记 文章目录 小马哥 Spring编程思想笔记 Spring Framework 课前准备 Spring 特性总览 Spring 版本特性 Spring 模块化设计 Sp ...

  2. 小马哥spring编程核心思想_求小马哥讲Spring栈核心编程思想 Spring IoC+Bean+Framework教程...

    这次搜集了下小马哥讲Spring栈核心编程思想 Spring IoC+Bean+Framework,最强Spring全面核心实战的视频教程,有需要的朋友可以自行下载学习. 课程简介: 小马哥出手的Sp ...

  3. 小马哥spring编程核心思想_小马哥讲Spring核心编程思想

    小马哥讲Spring核心编程思想 ├─第01章:Spring Framework总览 (12讲) │      01丨课程介绍.mp4 │      02丨内容综述.mp4 │      03丨课前准 ...

  4. 小马哥spring编程核心思想_Spring源码高级笔记之——Spring核心思想

    Spring核心思想 注意:IOC和AOP不是spring提出的,在spring之前就已经存在,只不过更偏向于理论化,spring在技术层次把这两个思想做了非常好的实现(Java) 第1节loC 1. ...

  5. 小马哥spring编程核心思想_极客小马哥Spring核心编程思想

    42 | 依赖查找的今世前生:Spring IoC容器从Java标准中学到了什么? 43 | 单一类型依赖查找:如何查找已知名称或类型的Bean对象? 44 | 集合类型依赖查找:如何查找已知类型多个 ...

  6. Spring框架的两大核心思想

    Spring框架的两大核心思想 简介:Spring 的主要作用就是为代码"解耦",降低代码间的耦合度.就是让对象和对象(模 块和模块)之间关系不是使用代码关联,而是通过配置来说明. ...

  7. 【JAVAEE框架】浅谈 Spring 框架的两大核心思想 AOP 与 IOP

    哈喽~大家好呀,这篇来看看Spring 框架的两大核心思想.

  8. spring aop实例讲解_Spring框架核心知识点

    文章内容输出来源:拉勾教育Java高薪训练营 前言: 由于工作需要提升自身技术能力,在各方比较下,报名了拉勾教育的java高薪训练营,目前已经学了半个月啦,来说说自身学习的感受吧: 课程内容有广度更有 ...

  9. 应用数据流状态管理框架Redux简介、设计思想、核心概念及工作流

    tip:有问题或者需要大厂内推的+我脉脉哦:丛培森 ٩( 'ω' )و [本文源址:http://blog.csdn.net/q1056843325/article/details/54784109 ...

最新文章

  1. linux源码编译安装nginx
  2. 图像生成之扩散模型:靠加入类别条件,效果直达SOTA
  3. 5分钟教你制作狂拽酷炫的投资交易图
  4. python编写自定义模块_编写和导入自定义模块/类
  5. python网络运维案例代码库_OLDboy-python第八期运维教程
  6. java二重循环计数_java的二重循环代码样例
  7. .NET学习知识和技术总结
  8. 易筋SpringBoot 2.1 | 第廿六篇:SpringBoot访问缓存抽象Cache
  9. 熊猫烧香病毒(jusodl.exe severe.exe conime.exe)及其变种病毒专杀
  10. 《给产品经理讲技术》笔记之第三章:开发技术
  11. 关于矩阵乘法的记忆方法
  12. MAC版Sublime Text 解决 Unable to download XXX 问题
  13. 基于语义关联的中文查询纠错框架
  14. 聊聊我在阿里所经历的新零售业务商品中心微服务化的过程
  15. Android连接夜神模拟器详细步骤
  16. TCP/IP协议十三:TTL
  17. 地球online中国大区各服务器最近屡次发生高等级玩家砍死小号事件~
  18. 北达软TOGAF9鉴定级别认证考试通知
  19. HDMI-USB视频采集卡使用教程
  20. 电路串联和并联图解_什么是串联,什么是并联…求图解

热门文章

  1. VMware View 4.0 测试-7
  2. 点站点链接出现短时间白屏或闪屏现象
  3. jQuery.merge与concat的区别
  4. 英国电信宣布2030年前碳排放削减87%
  5. wallfall瀑布流的jq实现
  6. Maven 编译使用 rt.jar
  7. SQLite数据库介绍
  8. python知识点博客园_python零碎知识点一
  9. 【采购订单】利用BAPI创建PO后丢失消息输出
  10. 如何蒸螃蟹?教你蒸螃蟹3个小窍门