首页 > 其他分享 >10、Spring之AOP概述

10、Spring之AOP概述

时间:2023-08-09 23:44:24浏览次数:41  
标签:10 10.2 Spring 目标 通知 result AOP 方法 切面

10.1、概念

  • AOP(Aspect Oriented Programming)是一种设计思想,是软件设计领域中的面向切面编程

  • AOP是面向对象编程(OOP)的一种补充和完善,OOP是纵向继承机制,AOP是横向抽取机制

  • AOP能通过预编译方式和运行期动态代理方式,实现在不修改源代码的情况下动态地为程序添加统一的附加功能

10.2、术语

10.2.1、横切关注点

横切关注点是从目标方法中抽取出来的非核心业务代码,一个目标方法中可以有多个横切关注点

    public int add(int i, int j) {

	//输出日志属于非核心业务,这是该目标方法的第1个横切关注点
        System.out.println("[日志] add 方法开始了,参数是:" + i + "," + j);

        int result = i + j;
        System.out.println("方法内部 result = " + result);

	//输出日志属于非核心业务,这是该目标方法的第2个横切关注点
        System.out.println("[日志] add 方法结束了,结果是:" + result);

        return result;

    }

10.2.2、通知

非核心业务代码在目标方法中叫横切关注点,其被抽取封装到一个类(切面类)的方法中,这样的方法就是通知方法

通知方法一共有五种类型:

  • 前置通知:在被代理的目标方法前执行

  • 返回通知:在被代理的目标方法成功结束后执行(寿终正寝)

  • 异常通知:在被代理的目标方法异常结束后执行(死于非命)

  • 后置通知:在被代理的目标方法最终结束后执行(盖棺定论)

  • 环绕通知:包括上面四种通知对应的所有位置


            public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                Object result = null;
                try {
                    //前置通知增强位置:在调用目标对象执行功能之前,加入额外的操作
                    System.out.println("[日志] "+method.getName()+" 方法开始了,参数是:" + Arrays.toString(args));

                    //调用目标对象实现的核心逻辑
                    result = method.invoke(target, args);

                    //返回通知增强位置:在调用目标对象执行功能之后,加入额外的操作)
                    System.out.println("[日志] "+method.getName()+" 方法结束了,结果是:" + result);
                } catch (Exception e) {
                    //异常通知增强位置:在调用目标对象执行功能发生异常时,加入额外的操作
                    System.out.println("[日志] "+method.getName()+",异常:"+e.getMessage());
                }  finally {
                    //后置通知增强位置:在调用目标对象执行功能完毕时,加入额外的操作
                    System.out.println("[日志] "+method.getName()+",方法执行完毕");
                }

                //保证代理对象和目标对象的返回值一致
                return result;
            }

10.2.3、切面

切面是封装通知方法(横切关注点)的类,也叫切面类

10.2.4、目标

目标是被代理的(目标)对象,也就是要进行功能增强的对象,也可以说是要被抽取非核心业务代码的对象

10.2.5、代理

代理是对目标对象进行功能增强的(代理)对象,这个(代理)对象会由AOP通过代理模式自动创建

10.2.6、连接点

连接点是抽取横切关注点的位置

10.2.7、切入点

切入点是一个表达式,可以定位出连接点,从而实现把切面类中的通知方法安插到该位置

10.3、作用

  • 简化代码:把方法中固定位置的重复代码抽取出来,让被抽取非核心业务代码的方法更专注于自己的核心功能,从而提高内聚性

  • 代码增强:把特定的功能封装到切面类中,哪里有需要就往哪里安插,被安插了切面类特定功能的方法就被切面给增强了

标签:10,10.2,Spring,目标,通知,result,AOP,方法,切面
From: https://www.cnblogs.com/Javaer1995/p/17615726.html

相关文章

  • Microsoft SQL Server 2012 Updates / RTM (11.00.2100) / SP1 (11.0.3000.0 or 11.1.
    SQLSERVER2012SP4UpdateVersion:MSSQL2012SP4SECURITYUPDATE,Build:11.0.7507.2/11.4.7507.2,KB:KB4583465,ReleaseDate:January2021,Download:https://support.microsoft.com/en-us/topic/kb4583465-description-of-the-security-update-for-sql-serve......
  • spring-mvc 系列:拦截器和异常处理器
    目录一、拦截器的配置二、拦截器的三个抽象方法三、多个拦截器的执行顺序四、基于配置的异常处理器五、基于注解的异常处理器一、拦截器的配置SpringMVC中的拦截器用于拦截控制器方法的执行SpringMVC中的拦截器需要实现HandlerInterceptorSpringMVC的拦截器必须在SpringMVC的......
  • 【Spring】Bean Validation
     参考:https://www.baeldung.com/java-validationhttps://www.baeldung.com/java-bean-validation-not-null-empty-blankhttps://www.baeldung.com/spring-mvc-custom-validator 定制自己的校验器 maven依赖Inthelatestversionof spring-boot-starter-validation,......
  • P1042 [NOIP2003 普及组] 乒乓球
    题目描述华华通过以下方式进行分析,首先将比赛每个球的胜负列成一张表,然后分别计算在\(11\)分制和\(21\)分制下,双方的比赛结果(截至记录末尾)。比如现在有这么一份记录,(其中\(\textttW\)表示华华获得一分,\(\textttL\)表示华华对手获得一分):\(\texttt{WWWWWWWWWWWWWWWWWWWW......
  • 解密SpringBoot3.0:构建易维护的JavaWeb应用
    SpringBoot3.0最新深入浅出从入门到项目实战,突出Web应用痛点解决方案SpringBoot已经成为Java开发中最流行的框架之一,它提供了一种快速构建、易于扩展的方式,使开发人员能够更加专注于业务逻辑而不是繁琐的配置。而最新的SpringBoot3.0版本将进一步改善开发体验,并提供更多的解决方......
  • Spring 简介
    Spring是用于企业Java应用程序开发的最流行的应用程序开发框架。全球数百万开发人员使用SpringFramework创建高性能、易于测试和可重用的代码。SpringFramework是一个开源的Java平台。它最初由RodJohnson编写,并于2003年6月在Apache2.0许可下首次发布。Spring在大小和透明度方......
  • java 定时任务实现 每隔10天 删除指定文件夹下的文件
    使用ScheduledExecutorService实现要在Java中实现每隔10天删除文件夹下的文件,可以使用定时任务来执行此操作。可以使用Java中的ScheduledExecutorService类来创建和管理定时任务,并使用File类来删除文件。示例代码,用于实现每隔10天删除文件夹下的文件:importjava.io.File;......
  • Spring Boot 启动流程追踪(第一篇)
    1、初始化SpringApplication publicSpringApplication(ResourceLoaderresourceLoader,Class<?>...primarySources){ this.resourceLoader=resourceLoader; Assert.notNull(primarySources,"PrimarySourcesmustnotbenull"); this.primarySourc......
  • 遥遥领先 spring,中国人的 solon 来啦!10% 的体积,10倍的速度
    Solon是什么?Java生态型应用开发框架。它从零开始构建,有自己的标准规范与开放生态(历时五年,已有全球第二级别的生态规模)。与其他框架相比,它解决了两个重要的痛点:启动慢,费内存。2023年6月,Maven单月下载量突破200万。解决痛点?由于Solon Bean容器的独特设计,不会因为扩展依赖变多......
  • Spring 简介
    Spring是用于企业Java应用程序开发的最流行的应用程序开发框架。全球数百万开发人员使用SpringFramework创建高性能、易于测试和可重用的代码。SpringFramework是一个开源的Java平台。它最初由RodJohnson编写,并于2003年6月在Apache2.0许可下首次发布。Spring在大小和透明度......