什么是aop,app系统

什么是aop,app系统 概述在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,

概述

在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度低,提高程序的可重用性,同时提高了开发的效率。

aop的相关概念

Aspect(切面):

Aspect 声明类似于 Java 中的类声明,在 Aspect 中会包含着一些 Pointcut 以及相应的 Advice。在Spring AOP中,切面可以使用基于模式或者基于@Aspect注解的方式来实现。

Joint point(连接点)

表示在程序中明确定义的点,典型的包括方法调用,对类成员的访问以及异常处理程序块的执行等等,它自身还可以嵌套其它 joint point。在Spring AOP中,一个连接点总是表示一个方法的执行。

Pointcut(切点)

表示一组 joint point,这些 joint point 或是通过逻辑关系组合起来,或是通过通配、正则表达式等方式集中起来,它定义了相应的 Advice 将要发生的地方。匹配连接点的断言。Advice通知和一个Joint point切入点表达式关联,并在满足这个切入点的连接点上运行。切入点表达式如何和连接点匹配是AOP的核心:Spring缺省使用AspectJ切入点语法。

Advice(通知)

Advice 定义了在 Pointcut 里面定义的程序点具体要做的操作,许多AOP框架(包括Spring)都是以拦截器做通知模型,并维护一个以连接点为中心的拦截器链。它通过 before、after 和 around 来区别是在每个 joint point 之前、之后还是代替执行的代码。Advice 的类型有如下几种。

before advice

在 join point 前被执行的 advice. 虽然 before advice 是在 join point 前被执行, 但是它并不能够阻止 join point 的执行, 除非发生了异常(即我们在 before advice 代码中, 不能人为地决定是否继续执行 join point 中的代码)

after return advice

在一个 join point 正常返回后执行的 advice

after throwing advice

当一个 join point 抛出异常后执行的 advice

after(final) advice

无论一个 join point 是正常退出还是发生了异常, 都会被执行的 advice.

around advice

在 join point 前和 joint point 退出后都执行的 advice. 这个是最常用的 advice.

introduction

introduction可以为原有的对象增加新的属性和方法。Spring允许引入新的接口(以及一个对应的实现)到任何被代理的对象。例如,你可以使用引入来使一个bean实现IsModified接口,以便简化缓存机制。

Target(目标对象)

织入 Advice 的目标对象。既然Spring AOP是通过运行时代理实现的,这个对象永远是一个被代理(proxied)对象。

Weaving(织入)

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

切面类示例

packagecom.ambulance.biz.base;

importcom.alibaba.fastjson.JSON;
importlombok.extern.java.Log;
importorg.aspectj.lang.JoinPoint;
importorg.aspectj.lang.ProceedingJoinPoint;
importorg.aspectj.lang.annotation.*;
importorg.springframework.stereotype.Component;
importorg.springframework.web.context.request.RequestContextHolder;
importorg.springframework.web.context.request.ServletRequestAttributes;

importjavax.servlet.http.HttpServletRequest;
importjava.util.Arrays;
importjava.util.List;

@Aspect//标识切面类
@Component//加入IOC容器
@Log//log
publicclassAspectConfig{

//execution([可见性]返回类型[声明类型].方法名(参数)[异常]) 其中[]内的是可选的,其它的还支持通配符的使用:
//*:匹配所有字符
//..:一般用于匹配多个包,多个参数
// :表示类及其子类
//运算符有:

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/35250.html

(0)

相关推荐

  • 恐怖奶奶2下载,恐怖奶奶2测试版下载

    恐怖奶奶2测试版 恐怖奶奶2下载是一款非常惊险的密室逃脱手机游戏。 玩家需要在巨大的密室里逃跑,奶奶和可怕的爷爷在追。 很刺激,可以选择各种各样的地图和模式很有趣。 游戏介绍 这是...

    阅读 2022年11月3日
  • 邦采的意思(字义,诗词)

    词组邦采的意思(字义,诗词)基本解释详细字义 邦采拼音:bāng cǎi注音:ㄅㄤ ㄘㄞˇㄘㄞˋ解释:采邦,采服。九服(侯﹑甸﹑男﹑采﹑卫﹑蛮﹑夷﹑镇﹑藩服)之一。《书·康诰》:"侯甸男邦采卫。"孔传:"此五服,

    阅读 2021年11月19日
  • 蛋党x小豆联动即将上线!季盲盒和藏钱?

    距离网易最新休闲竞速手游《蛋仔派对》的正式开服,已经过去十多天啦,大家有没有领悟过关的小技巧,结交到

    2022年6月17日
  • 离婚了孩子怎么办,当老公要离婚时要怎么挽回

    一个女人最崩溃的事情不外乎自己为了家庭累死累活,丈夫不仅感受不到居然还出轨了。 但是,为了家庭为了孩子,你不仅不能认输,还要想办法去挽回自己的婚姻。 如果想要对婚姻进行自救,那么你...

    阅读 2021年12月14日
  • 快手能赚钱吗(快手申请内测可以赚钱吗)

    快手能赚钱吗(快手申请内测可以赚钱吗)快手能赚钱吗(快手申请内测可以赚钱吗)快手之前赚钱只有打赏,模式单一。但是,快手在2018年8月份开始走电商路线,有带货能力的主播开始卖货赚钱,对于把粉丝引流到微信号卖货,快手也没有

    营销 2021年8月26日
  • mysqlsla如何安装与使用

    技术mysqlsla如何安装与使用这篇文章给大家分享的是有关mysqlsla如何安装与使用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。mysqlsla的安装与使用1. mysqlsla[ro

    攻略 2021年12月4日