AOP核心概念
前言
一直以来AOP,我个人都是似懂非懂,感觉总是没理解透彻。个人感觉,就是概念点多,且由于翻译的原因,同一概念有多种说法,在还没完全搞懂前,好容易混淆和思维混乱。下面,我就把自己通俗的理解,分享一下,看会不会更容易理解。
一、Aop做什么
AOP负责,把切面所定义的横切逻辑,织入到切面所指定的连接点。
二、核心概念通俗理解
-
Aspect=切面: 由切点和增强组成。就是什么样的连接点,要增强什么。
-
横切关注点:关注点就是功能或业务逻辑。所以横切关注点就是周边功能的逻辑。
-
核心关注点:与横切关注点相对,就是我们平时的核心业务。
-
Join Point=连接点:方法的执行点;对于spring,所有方法的执行点都是连接点;备选点
-
Pointcut=切点:对连接点进行拦截的定义;所有方法都可视为连接点,切点要做的就是给一个规则,让符合的连接点添加增强。可以理解成规则;修饰;限定;筛选标准;
-
Advice=增强Or通知:就是拦截到连接点后,要执行的方法。理解成增强更好理解,就是在原对象基础上套一层逻辑,更强了。分为前置、后置、异常、最终、环绕通知五类。
-
Target=目标对象:AOP用代理的方式实现切面,会产生代理对象,就是目标对象。这别把Target理解成原对象了,不要和代理对象里的target(原对象)属性混淆了。
-
Weaving=织入:把切面和其它对象连接,并创建目标对象的过程。spring使用JDK动态代理织入。
-
Introduction=引入:不修改代理前提下,引入可以在运行期为类动态添加一些方法
三、类比理解
感觉这概念的东西,怎么说都会不好理解 。下面,我尝试举一下生活的例子用来类比说明,如果理解有误,麻烦帮忙指正。
先来个故事:
A星探收到了A公司的任务,其任务是:【在A城市,在6到8岁的男生里,找出有歌唱天赋的,A公司要将其培养成下一个周杰伦。】人物设定,设定A城市所有6到8岁的男生,主业都是去学校上学,在家里都是妈妈说了算。结果:通过A星探的努力 ,在成千上万的6到8岁小男生中,找到了3个极有天赋的男生,送到A公司培训了。由于只有6到8岁,3个男生委托妈妈做代理,全权负责与A公司的合同签定工作。
Ok!故事说完了,现在我们来类比一下:
核心关注点 : 小男生的主业务,就是上学
横切关注点 : 小男生的周边业务,是成为下一个周杰伦
Join Point=连接点 : A城市所有男生
Pointcut=切点 :就是故事中任务的要求,【要6到8岁】【是男生】【有歌唱天赋】
Advice=增强Or通知 : 就是找到合适的男生后,要怎么做,那就是参加A公司的培训
Target=目标对象 :由于小男生没完全民事行为能力,所以产生了代理人,就是他们的妈妈。
Aspect=切面: 可以理解为A公司给星探的任务。切点+增强
Weaving=织入:就是A星探望接到任务后,在人海中寻找符合要求的男生的过程,最终会与 他们妈妈签定合同,产生了代理的过程。