当前位置: 首页 > 科技观察

春季系列AOP的理解与解析

时间:2023-03-16 15:39:03 科技观察

今天是五一假期后的第一天,距离下周还有四天。这周主要是重新学习Spring。在这四天里,我将从以下几个角度进行分析和理解。(1)AOP的理解与分析(2)IOC的理解与分析(3)bean的理解与分析(4)spring配置文件的理解与分析首先今天对AOP的理解与分析以及对aop的理解是也分开讲解,思考一门技术,基本上是按照上学时课本上讲解一个新知识的顺序进行的。第一:什么是AOP?二:为什么要引入AOP?或者AOP解决什么问题?第三:如何简单的实现AOP?第四:AOP对我们写代码有什么思考和帮助?现在,开始讲解AOP,1什么是AOP?1.1概念介绍Spring的使命是简化Java代码开发,aop作为Spring的一个子模块也不例外。AOP是面向切面编程(Aspect-OrientedProgramming)的缩写。它和OOP(Object-OrientedProgramming)一样是一种编程思想,是对OOP的补充。如何理解什么是AOP?以日志为例,在很多管理系统中,比如订单系统、推送系统等,都需要记录日志。如果把日志相关的代码都写在每个业务逻辑中,就太重复了。简单封装一下日志的相关逻辑代码。然后将其嵌入到需要的地方。AOP也主要是为了嵌入。看下面的图片。添加订单编辑订单取消订单推送订单日志事务AOP旨在将横切关注点(crosscuttingconcern)从业务主体逻辑中分离出来实现关注点分离提高程序的模块化(而业务模块只需要关注业务逻辑,不需要关注日志、安全、事务等通用逻辑)上面提到了一些名词,比如切面、关注点、横切面等,下面对这些名词进行解释。1.2词汇解释AOP有自己的一套术语,我们必须了解这些术语才能更好地理解AOP。为了方便大家理解,下面就以课代表收作业为例。建议定义了在接受工作之前和之后需要做的事情。常见的通知类型有:before、after、after-returning、around等。包路径、类或抛出的异常。有点类似于可以收作业的时间点。切入点(PointCut)切入点用于定义切面的位置,即捕获哪些连接点调用,然后执行“通知”操作(什么位置)。切面(Aspect)切面是切入点和通知的聚合,它定义了在哪些切入点应该发出什么通知。目标对象(Target)指的是切面要织入的对象。简介简介允许我们向现有类添加新方法或属性。编织编织是将方面应用到与切入点对应的连接点的过程。方面在指定的连接点处被编织到目标对象中。具体关系用图形表示:2为什么要引入AOP?以上是定义。之所以引入AOP,肯定是为了解决目前开发中的一些痛点:(1)在目前的开发中,彼此都是模块化的开发,使用AOP可以有效的实现模块化的思想。(2)将辅助逻辑(日志、安全、监控等)与业务主体逻辑分离,同步开发。AOP是一种思想,就是把一些业务逻辑分离出来,然后按照主要的业务逻辑进行组合,最终实现想要的功能逻辑。3如何简单的实现AOP?3.1AOP编程思路这张图是一个简单的思路。明确需求创建切面类定义定义切入点Notify思考:在什么时间在哪个方法中做什么(之前?)做什么下面定义了一个简单的日志记录实现AOP的案例。原来使用的注解方法:3.2案例实现AOP3.2.1明确要求在一个方法上加上@FddLog,在方法执行前后会自动输出相应的信息。下面是把大象放进冰箱的例子:3.2.2基本接口和实现publicinterfaceElephentToRe{publicvoidtoRe();}实现类如下:publicclassElephentToReImplimplementsElephentToRe{publicvoidtoRe(){System.out.println("把大象放intherefrigerator");}}3.2.3定义方面和通知门”);}}配置就好了3.2.4测试看效果publicclassTest{publicstaticvoidmain(String[]args){@SuppressWarnings("resource")ApplicationContextappCtx=newFileSystemXmlApplicationContext("application.xml");ElephentToReelephentToReImpl=(ElephentToRe)appCtx.getBean("elephentToReImpl");elephentToReImpl.toRe();}}上面的方法是通过纯POJO方面实现的,方法也比较简单的。4我对AOP思想的看法任何新技术的出现,都是为了解决当前开发中的一些痛点。对于aop来说,主要是对一些功能代码进行抽象和封装,与主要的业务逻辑代码分离。只需在需要的地方编织。我的看法是(1)在开发代码的时候,完全可以把一些常用的、常用的功能代码封装起来,尽量做到动态配置。不同的功能模块只需要织入即可。(2)定义业务逻辑模板。比如你要解决某个业务功能,如果页面相似,你可以按照基本框架进行组合,然后使用配置平台进行可控配置。本文转载自微信公众号“愚公要移山”,可关注下方二维码。转载本文请联系愚公移山公众号。