(2021.9.25)面向切面编程简述

本文介绍了面向切面编程(AOP)的基本概念,包括连接点、切点、增强、目标对象、引介、织入和代理等核心术语,并通过实践展示了如何在Spring中使用自定义注解进行方法增强,帮助读者深入理解AOP的运用。
摘要由CSDN通过智能技术生成

说到面向切面编程,想必大家都不会陌生。不就是AOP——Aspect Orient Programming

但是说了那么久,你所理解的面向切面编程,用一句话概括到底是什么呢?

目录

1.什么是AOP(面向切面编程)

2.AOP相关术语

1.连接点(Joinpoint)

2.切点(Pointcut)

3.增强(Advice)

4.目标对象(Target)

5.引介(Introduction):

6.织入(Weaving):

7.代理(Proxy)

9.切面(Aspect)

3.实践

3.1 简单的自定义注解增强

3.2 通过指定类/方法进行增强


1.什么是AOP(面向切面编程)

在我的理解来说:

在运行时,动态的 将代码 切入到 类的 指定方法。  这种编程思想就称为面向切面编程

 

来举个例子吧,你写了A方法之后,老板想让你看看这段代码的执行时间。ok,那你就在A方法的前后加上代码,查看时间。。。

过了几天,你又完成了B方法之后,老板又想让看你记录这段代码的日志信息。没问题,加上

又过了几天,老板又要让你每个功能都加上日志功能。。。没过几天你就。。。

久而久之,你就发现,你的代码中会出现越来越多与业务无关的东西。后来你发现它们都是有共同点的,于是你将这些公共的代码整体抽成common方法进行调用,想办法降低耦合。但是由于是在方法中进行调用,该污染代码还是会污染,如果严格说来还是有很强的关联系的。比如说一旦涉及到部分参数的传递,那么耦合度还是很高的。

在你想解耦合且方便维护的时候,AOP出现了。

spring提供这个工具,让你能解决上述老板给你提出的这些要求,避免你修改次数太多删库跑路~

2.AOP相关术语

1.连接点(Joinpoint)

程序执行的某个特定位置:如类开始初始化前,类初始化后,类某个方法调用前。一个类或一段代码拥有一些边界性质的特定点,这些代码中的特定点就被称为“连接点”。Spring仅支持方法的连接点,既仅能在方法调用前,方法调用后,方法抛出异常时等这些程序执行点进行织入增强。

连接点由两个信息确定:第一是用方法表示的程序执行点;第二是用相对点表示的方位。如在Test.foo()方法执行前的连接点,执行点为Test.foo(),方位为该方法执行前的位置。Spring使用切点对执行点进行定位,而方位则在增强类型中定义。

2.切点(Pointcut)

每个程序类都拥有多个连结点,如一个拥有两个方法的类,这两个方法都是连接点,既连接点是程序中客观存在的事务。当某个连接点满足指定要求时,就可以被添加Advice,成为切点,比如:

pointcut xxxPorintcut()

:execution(void H*.say*())

每个方法被调用,都只是连接点,如果某个方法属于H开头的类,而且方法一say开头,则该方法就变成了切入点。如何使用表达式定义切入点,是AOP的核心,Spring默认使用AspectJ切入点语法。

3.增强(Advice)

连接上一条,你可以在切点这里做一些事情,有“around”,“before”,“after”等类型。

4.目标对象(Target)

被AOP框架进行增强处理的对象。如果是动态AOP的框架,则对象是一个被代理的对象。

5.引介(Introduction):

引介是一种特殊的增强,它为类添加一些属性和方法。这样,即使一个业务类原本没有实现某个接口,通过AOP的引介功能,我们可以动态的为该事务添加接口的实现逻辑,让业务类成为这个接口的实现类。

6.织入(Weaving):

织入是将增强添加对目标类具体连接点上的过程,AOP象一台织布机,将目标类增强或引介AOP这台织布机天衣无缝的编织在一起。

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值