SpringBoot 入门笔记(一)AOP 与 IoC

Spring的核心就是AOP与IoC,想要学习SpringBoot,首先得理解这些概念:

    AOP(Aspect Oriented Programming 面向切面编程)

    IoC(Inversion of Control 控制反转)

    DI(Dependency Injection 依赖注入)

AOP是什么

非常简单易懂的AOP文章:https://www.cnblogs.com/Wolfmanlq/p/6036019.html

AOP - Aspect Oriented Programming(面向切面)是一种编程范式,算是一个比较热门的话题,以至于有一种论调说“AOP会替代OOP”,然而事实上AOP跟OOP的关注点并不相同。面向对象(OOP)的目的在于抽象 ,而面向切面(AOP)的目的在于解耦

在Java中面向切面编程需要使用反射(动态代理)实现,操作比较麻烦。而在Python语言中则提供了一个很好用的语法糖–装饰器

AOP主要实现的目的是针对业务处理过程中的切面进行提取,它所面对的是处理过程中的某个步骤或阶段,以获得逻辑过程中各部分之间低耦合性的隔离效果。其与设计模式完成的任务差不多,是提供另一种角度来思考程序的结构,来弥补面向对象编程的不足。例如:针对某些业务逻辑 添加日志、权限、事务等功能。

比如,若是需要一个记录日志的功能,首先想到的是在方法中通过log4j或其他框架来进行记录日志,但写下来发现一个问题,在整个业务中其实核心的业务代码并没有多少,都是一些记录日志或其他辅助性的一些代码。而且很多业务有需要相同的功能,比如都需要记录日志,这时候又需要将这些记录日志的功能复制一遍,即使是封装成框架,也是需要调用之类的,在此处使用复杂的设计模式又得不偿失。

因此就需要面向切面出场了!!!

Aop 常用术语

切面(Aspect):

一个关注点的模块化,这个关注点可能会横切多个对象。事务管理是J2EE应用中一个关于横切关注点的很好的例子。在Spring AOP中,切面可以使用基于模式或者基于@Aspect注解的方式来实现。

连接点(Joinpoint):

在程序执行过程中某个特定的点,比如某方法调用的时候或者处理异常的时候。在Spring AOP中,一个连接点总是表示一个方法的执行。

通知(Advice):

在切面的某个特定的连接点上执行的动作。其中包括了“around”、“before”和“after”等不同类型的通知(通知的类型将在后面部分进行讨论)。许多AOP框架(包括Spring)都是以拦截器做通知模型,并维护一个以连接点为中心的拦截器链。

切入点(Pointcut):

匹配连接点的断言。通知和一个切入点表达式关联,并在满足这个切入点的连接点上运行(例如,当执行某个特定名称的方法时)。切入点表达式如何和连接点匹配是AOP的核心:Spring缺省使用AspectJ切入点语法。

引入(Introduction):

用来给一个类型声明额外的方法或属性(也被称为连接类型声明(inter-type declaration))。Spring允许引入新的接口(以及一个对应的实现)到任何被代理的对象。例如,你可以使用引入来使一个bean实现IsModified接口,以便简化缓存机制。

目标对象(Target Object):

被一个或者多个切面所通知的对象。也被称做被通知(advised)对象。既然Spring AOP是通过运行时代理实现的,这个对象永远是一个被代理(proxied)对象。

AOP代理(AOP Proxy):

AOP框架创建的对象,用来实现切面契约(例如通知方法执行等等)。在Spring中,AOP代理可以是JDK动态代理或者CGLIB代理。

织入(Weaving):

把切面连接到其它的应用程序类型或者对象上,并创建一个被通知的对象。这些可以在编译时(例如使用AspectJ编译器),类加载时和运行时完成。Spring和其他纯Java AOP框架一样,在运行时完成织入。


IoC是什么

IoC - Inversion of Control 控制反转,它不是一种技术,而是一种设计思想。

Java程序中的每个业务逻辑至少需要两个或以上的对象来协作完成,通常每个对象在使用它的合作对象时,自己需要通过new object() 这样的语法来完成合作对象的初始化工作,这就会使得:对象间的耦合度加深。

Spring IOC的思想是:Spring容器来实现这些相互依赖对象的创建、协调、管理和销毁工作,对象只需要关注业务逻辑本就可以了,而不是传统的在你的对象内部直接控制。;也就可以被称之为:对象如何得到它的合作对象的责任被反转了(IOC/DI)。

DI其实是IOC的另外一种说法,DI是由Martin Fowler 在2004年初的一篇论文中首次提出的。他总结:控制的什么被反转了?就是:获得依赖对象的方式反转了。

Spring所倡导的开发方式是:所有的类都会在Spring容器中登记,告诉Spring你是个什么东西?你需要什么东西?然后Spring会在系统运行到适当的时候,自动把你要的东西主动给你(而不是在一开始实例化所有对象,从而提高的性能)。所有类的创建、销毁都由Spring来控制,也就是说控制对象生命周期的不再是引用他的对象,而是Spring。对于某个具体的对象来说,以前是它自己去控制其他对象;现在是所有对象都由Spring来控制,这就叫IOC/DI(控制反转 或 依赖注入)。

IOC的一个重点是在系统运行中,动态的向某个对象提供它所需要的其他对象,这一点是通过DI(Dependency Injection)来实现的。

例如 对象A需要操作数据库对象,以前需要在A中自己编写代码来获得一个Connection对象;有了Spring后,我们只需要告诉Spring,A中需要一个Connection对象,至于这个Connection如何构造,何时构造,A不关心也不需要知道。在系统运行时,Spring会在适当的时候制造一个Connection对象,然后像打针一样,自动注射到A对象当中,这样就完成了对各对象之间关系的控制。

那么DI是如何实现的呢?在Java1.3之后有一个非常重要的特性 Reflection(反射),它允许程序在运行时动态的生成对象、执行对象的方法、改变对象的属性,Spring就是通过反射来实现自动注入的。

Spring IOC管理的对象,我们称之为Bean对象,Bean对象就是Spring容器初始化、装配、管理的对象;除此之外,Bean对象与程序中的其他对象没有什么区别,那IOC是如何实例化Bean、管理Bean之间的依赖关系呢?答案是: 通过Annotation或XML配置文件来实现手动或自动装配Bean。

参考文章:
https://blog.csdn.net/happydecai/article/details/79972744
https://blog.csdn.net/jiangyu1013/article/details/72654373
https://blog.csdn.net/zhaoyanjun6/article/details/80669022

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,732评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,496评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,264评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,807评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,806评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,675评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,029评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,683评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,704评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,666评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,773评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,413评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,016评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,204评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,083评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,503评论 2 343

推荐阅读更多精彩内容