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

AOP思想应该怎么理解!

时间:2023-03-11 21:46:17 科技观察

我们都知道在面试的时候很多面试官喜欢问基础知识,但是基础的内容都是AOP理论,然后问到Spring的AOP的实战讲解的时候就问的不多了。一丝不苟,因为毕竟是面试,但是当你面试一些稍微大一点的公司的时候,他们喜欢问你知道的AOP在什么地方用,怎么用。今天就讲讲这个Spring的AOP是如何使用的。AOP思想在软件界,AOP是AspectOrientedProgramming的缩写,意思是:面向方面的编程,一种通过预编译和运行时动态代理实现程序功能统一维护的技术。AOP是OOP的延续,是软件开发的热点,是Spring框架中的重要内容,是函数式编程的衍生范式。AOP可以用来隔离业务逻辑的各个部分,从而降低业务逻辑各个部分之间的耦合度,提高程序的复用性,提高开发效率。以上为百度百科提供的信息。实际上,它是一个模型和一个想法。它是用来降低我们代码耦合度的一个思想,因为我们写代码是否要写出相应的业务逻辑,我们必须要有一个思想,就是高内聚低耦合的思想。只有保持这种思想,才能写出相对优质的代码,而AOP要求我们体现这种思想。出来。那么什么是AOP?如何理解AOPAOP俗称面向切面编程。我们都知道,在采访中,这绝对是真的。那么接下来面试官的问题就是AOP一般应用在什么地方,比如在自己的项目中。其中,AOP应用在什么地方,如何应用,然后根据你说的应用,继续问。其实你理解的话,就是面向切面的编程,也就是我们横向抽取一段垂直的代码,抽取的意思就是我们对自己的业务做一些相应的改变,但是不去修改本质的内容。这就是AOP在我们项目中最有意义的地方。AOP的相关概念Aspect(切面):Aspect声明类似于Java中的类声明,Aspect会包含一些Pointcut和相应的Advice。联合点(connectionpoint):表示程序中一个明确定义的点,通常包括方法调用、类成员的访问、异常处理程序块的执行等,也可以嵌套其他联合点。切点(pointcut):表示一组关节点。这些联合点或者通过逻辑关系组合起来,或者通过通配符、正则表达式等方式聚集在一起,定义相应的Advice会出现在哪里。Advice(增强):Advice定义了在Pointcut中定义的程序点要完成的具体操作。它使用before、after和around来区分是在每个关节点执行的代码之前、之后还是代替。Target(目标对象):编织成Advice的目标对象。编织(weaving):将Aspect与其他对象连接起来,创建一个Adviced对象的过程。以上内容均为比较官方的说法。官方的解释就是上面提到的内容,也是面试中谈的最多的内容,那么AOP的思想是如何应用的呢?AOP的应用接下来通过阿芬的整个简单应用来熟悉一下AOP的这个典型应用。首先引入相关依赖:org.springframework.bootspring-boot-starter-web2.4.4org.springframework.bootspring-boot-starter-aop然后我们创建一个Controller和ServiceClass@Service@Slf4jpublicclassUserService{publicvoidsave(){log.info("正在保存数据!");}}@Controller@RequestMapping("demo/")公共类DemoController{finalUserServiceuserService;publicDemoController(UserServiceuserService){this.userService=userService;}/***模拟AOP*/@RequestMapping("/aop")@ResponseBodypublicvoidaopTest(){userService.save();}}然后我们构建一个切面类@Aspect@Component@Slf4jpublicclassUserServiceAspect{/***环绕方面*/@Around("execution(*com.computer.fundamentals.networkprogram.service.UserService.*(..))")publicvoidsaveHandle(ProceedingJoinPointproceedingJoinPoint){log.info("start");对象结果;尝试{结果=proceedingJoinPoint.proceed();}catch(Throwablethrowable){log.info("服务器错误");}log.info("结束");}}然后我们做一个测试,直接访问接口就可以看到我们的打印日志,2021-11-0110:07:11.887INFO12052---[nio-8080-exec-1]c.c.f.n.service.aop.UserServiceAspect:start2021-11-0110:07:11.894INFO12052---[nio-8080-exec-1]c.c.f.n.service.UserService:保存数据!2021-11-0110:07:11.894INFO12052---[nio-8080-exec-1]c.c.f.n.service.aop.UserServiceAspect:end这样我们就实现了一个AOP操作供自己使用,那么在Spring中这个AOP思想会应用到什么呢?AOP思想应用AOP应用场景:日志打印、全局异常拦截、统一返回值、多数据源切换。以上场景都是AOP的典型应用。目的很明确,可以在不影响代码业务逻辑的情况下完成。一些比较好的操作,让AOP的思想可以完美的实现至于如何实现日志,不用我多说。你可以百度复制一份。如果您手动键入代码,则完全没有问题。关于AOP还有什么你不知道的?