AOP、ASPECT、Spring AOP、JDK动态代理、CGLib动态代理

java Spring的AOP理解和动态代理 什么是代理?主要有什么用? 为其他对象提供一种代理来控制对这个对象的访问。在某些情况下,一个客户不想或者不能直接引用另一个对象,而代理对象可以在客户和目标对象之间起到中介的作用。代理好处是:通过代理类获取目标对象,并且对类中方法进行的增强(就是切面,在方法执行前和方法执行后可以写自己逻辑,这就是AOP切面编程来源),这也就设计到一个代理模式概念 代理模式在我们日常中很常见,生活处处有代理: ... 阅读详情

AOP、ASPECT、Spring AOP、JDK动态代理、CGLib动态代理

1 AOP介绍


1.1 基本定义

AOP(Aspect Oriented Programming)称为面向切面编程,它是一种编程思想,是对OOP(Object Oriented Programming)的补充,可以进一步提高编程效率,在程序开发中主要用来解决一些系统层面上的问题,比如日志,事务,权限等,Struts2的拦截器设计就是基于AOP的思想,是个比较经典的例子

1.2 解释

要理解切面编程,就需要先理解什么是切面。用刀把一个西瓜分成两瓣,切开的切口就是切面;炒菜,锅与炉子共同来完成炒菜,锅与炉子就是切面。web层级设计中,web层->网关层->服务层->数据层,每一层之间也是一个切面。编程中,对象与对象之间,方法与方法之间,模块与模块之间都是一个个切面

举例说明,一般在编写web服务接口时,进入某个接口后会检验当前是否需要登录,有部分接口需要登录才能访问,而有部分接口不需要登录也可以访问

按照正常的逻辑而言,我们会这样做:

在这里插入图片描述

但是这种方法存在一个问题,即代码的重复度高,每个接口都要编写相当的检测代码,不利于维护和扩展。因此,为了提高代码的复用性,考虑将所有公共代码抽取成一个公共方法,每个接口调用该方法进行检测,这里有点切面的味道了

在这里插入图片描述

第二版的方法相比第一版的重复代码减少了,系统的扩展性和代码的复用性也提高了,但是还是存在问题,即每个接口都要调用该方法,也会存在相同代码。因此,便提出了“切面”的概念,将该方法注入到接口调用的某个地方(切点),因此无需编写调用方法的代码,每次在方法运行前会自动在切点处调用该方法,进一步提升了系统的扩展性,并降低了代码之间的耦合度

在这里插入图片描述

这样接口只需要关心具体的业务,而不需要关注其他非该接口关注的逻辑或处理。红框处,就是面向切面编程

1.3 AOP中的相关概念

  • 切面(Aspect)

    切面是一个横切关注点的模块化,一个切面能够包含同一个类型的不同增强方法,比如说事务处理和日志处理可以理解为两个切面。切面由切入点和通知组成,它既包含了横切逻辑的定义,也包括了切入点的定义。 Spring AOP就是负责实施切面的框架,它将切面所定义的横切逻辑织入到切面所指定的连接点中

    @Component
    @Aspect //可以简单地认为, 使用 @Aspect 注解的类就是切面
    public class LogAspect {
    }
    
  • 目标对象(Target)

    **目标对象指将要被增强的对象,即包含主业务逻辑的类对象。**或者说是被一个或者多个切面所通知的对象,即就是被通知的对象。这些对象中已经只剩下干干净净的核心业务逻辑代码,所有的共有功能等待AOP容器的切入

  • 连接点(JoinPoint)

    程序执行过程中明确的点,如方法的调用或特定的异常被抛出。连接点由两个信息确定:

    (1)方法(表示程序执行点,即在哪个目标方法)

    (2)相对点(表示方位,即目标方法的什么位置,比如调用前,后等)

    简单来说,连接点就是被拦截到的程序执行点,因为Spring只支持方法类型的连接点,所以在Spring中连接点就是被拦截到的方法

    @Before("pointcut()")
    public void log(JoinPoint joinPoint) { //这个JoinPoint参数就是连接点
    }
    
  • 切入点(PointCut)

    切入点是对连接点进行拦截的条件定义。切入点表达式如何和连接点匹配是AOP的核心,Spring缺省使用AspectJ切入点语法。 一般认为,所有的方法都可以认为是连接点,但是我们并不希望在所有的方法上都添加通知,而切入点的作用就是提供一组规则(使用 AspectJ pointcut expression language 来描述) 来匹配连接点,给满足规则的连接点添加通知

    @Pointcut(value = "@annotation(authorityVerify)")
    public void pointcut(AuthorityVerify authorityVerify) { //该切入点的匹配规则是所有加了@AuthorityVerify注解的函数,并且通过authorityVerify还可以获得注解中的相关信息
    }
    
    @Pointcut("execution(* com.remcarpediem.test.aop.service..*(..))")
    public void pointcut() {//该切入点的匹配规则是com.remcarpediem.test.aop.service包下的所有类的所有函数
    }
    
  • 通知(Advice)

    通知是AOP在特定切入点上执行的增强处理,是拦截到连接点之后要执行的代码,通知可以分为前置通知Before、后置通知AfterReturning、异常通知AfterThrowing、最终通知After、环绕通知Around五类

    //@Around说明这是一个环绕通知,环绕通知是指在方法执行前后进行拦截
    @Around("pointcut()")
    public void log(JoinPoint joinPoint) { 
            try {
                return joinPoint.proceed();//执行方法,环绕通知中必须包含该行代码
            } catch (BaseException e) {//即使方法执行报错,也会被环绕通知拦截
                 throw e;
            } catch (Throwable throwable) {
                 throwable.printStackTrace();
                 throw new RuntimeException(throwable);
            }
    }
    
  • 织入(Weaving)

    **织入是将切面和业务逻辑对象连接起来, 并创建通知代理的过程。**织入可以在编译时,类加载时和运行时完成。在编译时进行织入就是静态代理,而在运行时进行织入则是动态代理

  • 增强器(Adviser)

    Advisor是切面的另外一种实现,能够将通知以更为复杂的方式织入到目标对象中,是将通知包装为更复杂切面的装配器。Advisor由切入点和Advice组成。 Advisor这个概念来自于Spring对AOP的支撑,在AspectJ中是没有等价的概念的。Advisor就像是一个小的自包含的切面,这个切面只有一个通知。切面自身通过一个Bean表示,并且必须实现一个默认接口

    // AbstractPointcutAdvisor是默认接口
    public class LogAdvisor extends AbstractPointcutAdvisor {
         private Advice advice; // Advice
         private Pointcut pointcut; // 切入点
    
         @PostConstruct
         public void init() {
         // AnnotationMatchingPointcut是依据修饰类和方法的注解进行拦截的切入点。
         this.pointcut = new AnnotationMatchingPointcut((Class) null, Log.class);
         // 通知
         this.advice = new LogMethodInterceptor();
         }
    }
    

    注:以上代码示例都是基于SpringAop完成

在这里插入图片描述

2 AOP实现


AOP前面说过是一种编程思想,因此需要具体的实现方式来实现

AOP的实现主要分为静态代理和动态代理,静态代理的实现方式是AspectJ,而动态代理则以Spring AOP为代表

  • AspectJ(静态)
    • AspectJ是语言级的实现,它扩展了Java语言,定义了AOP语法
    • AspectJ在编译期织入代码,它有一个专门的编译器,用来生成遵守Java字节码规范的class文件,需要在工程外处理,不易于移植
    • 因为是编译器期执行,在运行时没有开销,所以性能上AspectJ肯定是强于AOP的
    • AspectJ是在jdk基础上实现了,不用额外添加jdk外的执行文件
  • Spring AOP(动态)
    • Spring AOP使用纯Java实现,它不需要专门的编译过程,也不需要特殊的类装载器
    • Spring AOP在运行时通过代理的方式织入代码,只支持方法类型的连接点
    • Spring支持对AspectJ的集成

在这里插入图片描述

3 Spring AOP实现


Spring AOP实现主要是通过代理类的方式实现,有java动态代理和CGLIB代理两种方式

3.1 CGLIB和Java动态代理的区别

  • Java动态代理只能够对接口进行代理,不能对普通的类进行代理(因为所有生成的代理类的父类为Proxy,Java类继承机制不允许多重继承)。而CGLIB能够代理普通类
  • Java动态代理使用Java原生的反射API进行操作,在生成类上比较高效;CGLIB使用ASM框架直接对字节码进行操作,在类的执行过程中比较高效

3.2 Spring AOP默认的使用方式

  • 如果目标对象没有实现接口,则默认会采用CGLIB代理
  • 如果目标对象实现了接口,默认会采用Java动态代理

3.3 SpringAOP的具体案例–利用注解避免sql语句重复提交

3.3.1 自定义注解类
@Documented 
@Target(ElementType.METHOD) //表明该注解只能放在方法上
@Retention(RetentionPolicy.RUNTIME) //定义注解保留时间  
public @interface AvoidRepeatCommit {

    /**
     * 避免重复提交的时间间隔,默认为1000ms
     * */
    int repeatTime() default 1000;
}
3.3.2 切面类
@Aspect
@Component
@Slf4j
public class AvoidRepeatCommitAspect {

    @Autowired
    private RedisCache redisCache;

    @Pointcut(value = "@annotation(avoidRepeatCommit)")
    public void pointcut(AvoidRepeatCommit avoidRepeatCommit){

    }

    @Around(value = "pointcut(avoidRepeatCommit)")
    public Object doAround(ProceedingJoinPoint joinPoint, AvoidRepeatCommit avoidRepeatCommit) throws Throwable {
        //将请求ip、方法名、方法参数封装成hash值,存到redis中,利用redis进行拦截
        ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        HttpServletRequest request = attributes.getRequest();
        String ipAddr = IpUtils.getIpAddr(request);
        //获取方法签名
        Object[] args = joinPoint.getArgs();
        StringBuilder argsSb = new StringBuilder();
        for(Object arg : args){
            argsSb.append(arg.getClass().getName());
        }
        Signature signature = joinPoint.getSignature();
        String className = signature.getClass().getName();
        String methodName = signature.getName();
        // 得到类名和方法
        String ipKey = String.format("%s#%s#%s", className, methodName, argsSb.toString());
        // 转换成HashCode
        int ipKeyHashCode = Math.abs(ipKey.hashCode());
        String redisIpKey = RedisConstant.AVOID_REPEAT_COMMIT + RedisConstant.REDIS_SEGMENTATION + ipAddr + RedisConstant.REDIS_SEGMENTATION + ipKeyHashCode;
        log.info("ipKey={},hashCode={},key={}", ipKey, ipKeyHashCode, redisIpKey);
        String repeatVal = redisCache.getCacheObject(redisIpKey);
        int repeatTime = avoidRepeatCommit.repeatTime();
        if(!StringUtils.isEmpty(repeatVal)){
            log.info("请勿重复提交请求");
            return R.error("请勿重复提交请求");
        }
        redisCache.setCacheObject(redisIpKey, StringUtils.getUUID(), repeatTime, TimeUnit.MILLISECONDS);
        return joinPoint.proceed();
    }

}
3.3.3 使用

在想要使用的方法上加上@AvoidRepeatCommit注解即可,然后Spring AOP会自动实现避免重复sql提交

Spring选择判断习题练习 1、 下列有关AOP专业术语中,用于表示切面与程序流程的交叉点的是()。 3分 A、Joinpoint B、Pointcut C、Aspect D、Advice 2、 以下有关CGLIB代理相关说法正确的是()。 3分 A、CGLIB代理的使用非常简单,但它还有一定的局限性——使用动态代理的对象必须实现一个或多个接口 B、如果要对没有实现接口的类进行代理,那么可以使用JDK代理 C、CGLIB是一个高性能开源的代码生成包,在使用时需要另外导入CGLIB所需要的包 D、Spring中的AOP代理,可以是JDK 阅读详情

相关推荐

Spring: Spring AOP 方面/切面(Aspect)

Spring :Spring AOP 中的一些术语由于增强包括横切代码,又包含部分连接点信息(方法前、方法后主方位信息),所以可以仅通过增强类生成一个切面。但切点仅仅代表目标类连接点的部分信息(类和方法的定位),所以仅有切点无法制作出一个切面,必须结合增强才能制作出切面。Spring使用接口标识切面概念,一个切面同时包含横切代码和连接点信息。

九师兄 1201

【SpringBoot应用篇】SpringBoot集成Aspect AOP面向切面编程

SpringBoot使用AOP实现日志管理回顾 回顾

输入技术、输出想法 1722

Spring AOP操作日志记录与Aspect源码解析

Spring AOP是Spring框架的一部分,它支持面向切面编程(Aspect-Oriented Programming,简称AOP),允许开发者将横切关注点(cross-cutting concerns)与业务逻辑分离。通过使用AOP,可以将系统中分散的、与业务逻辑不直接相关的功能(如日志、安全、事务管理等)模块化,从而提高代码的重用性和模块的内聚性。动态代理是在运行时动态生成代理对象的技术。它不需要提前编写代理类,而是通过某种代理机制在运行时自动生成。这种方式提高了程序的灵活性,减少了代码量。

weixin_32047493的博客 994

spring AOP 实现aop 的几种方式

一、 注解实现 @Aspect public class CoutomAOP{ @Before("execution(* service.UserServiceImpl.*(..))") public void before(){ System.out.println("方法执行前"); } @After("execution(* service.UserServiceImpl.*(..))") public void after(){

来啊 搬砖啊 911

单目视觉定位:深入解析PNP算法在机器人导航中的实战应用

本文深入解析了PNP算法在机器人单目视觉定位中的核心原理与实战应用。通过拆解坐标变换四步,详细阐述了如何从二维图像点反求相机三维位姿。文章结合OpenCV的solvePnP函数,提供了算法选择、参数调优及结果后处理的实用指南,并针对机器人导航中的特征匹配、尺度不确定性等挑战,给出了鲁棒性优化与实时性平衡的解决方案。

weixin_29083649的博客 419

channel || channelGroup || ctx.writeAndFlush()发送字符串消息客户端接收不到的原因

一、原因 网络上传播的数据都是字节(二进制数据)类型。我们如果直接向网络流里面写入一个对象(如:String对象),是无法传输的。只有将对象序列化(转换为可以传输的字节类型)之后,才可以进行传输。所以问题的根源就很清楚了,需要把字符串转换成字节进行传输。、 二、解决办法 1、手动序列化 服务端: channelGroup.writeAndFlush(Unpooled.copiedBuffer("【客户端】"+remoteAddress+"已下线"+format.format(new Date()), Cha

haohaoxuexiyai的博客 4060

Spring 之AOP AspectJ切入点语法详解(最全面、最详细。)

6.5 AspectJ切入点语法详解 6.5.1 Spring AOP支持的AspectJ切入点指示符 切入点指示符用来指示切入点表达式目的,,在Spring AOP中目前只有执行方法这一个连接点,Spring AOP支持的AspectJ切入点指示符如下: execution:用于匹配方法执行的连接点; within:用于匹...

zhengchao1991的博客 9万+

Deepseek+Word插件:一键搞定论文翻译与润色的学术写作新革命

本文介绍了Deepseek Word插件如何革新学术写作流程,实现论文翻译与润色的一键操作。该插件深度集成于Word环境,能智能完成中英互译、语法修正、术语统一及逻辑优化,显著提升写作效率与文本质量,是研究者的高效AI助手。

weixin_29252171的博客 513

深入解析AOP核心概念与Spring实现机制

面向切面编程(AOP)是一种补充面向对象编程(OOP)的重要范式,通过代理模式实现横切关注点(如日志、事务、安全等)的模块化。其核心原理包括切入点(Pointcut)、增强(Advice)、切面(Aspect)等概念,采用动态代理技术在运行时织入功能。Spring AOP作为主流实现,默认使用JDK动态代理和CGLIB,支持声明式事务管理等典型应用场景。在分布式系统和微服务架构中,AOP与Spring生态深度整合,广泛应用于性能监控、链路追踪等关键领域,显著提升代码复用性和可维护性。

weixin_34417183的博客 355

DAP-Link DIY复刻指南

DAP-Link是ARM开源的一个项目,主要用于代码下载以及调试,支持SWD和JTAG调试接口,对于开发嵌入式的同学相信都或多或少有所耳闻。除了DAP-Link之外还有很多同类型的调试器,如ST-LinkJ-Link,但是这些都是不开源的,无法复刻或进行二次开发。但DAP-Link不同,完全开源,不用担心侵权问题,且随着开源社区大家的共同努力,DAP-Link经过了不断的迭代,先如今已取代ARM之前推出的CMSIS-DAP开源项目。

爱出名的狗腿子 1万+

从零开始!Jupyter Notebook的安装教程(附带pip和Python的安装教程)

本篇文章创造性的以“授人以渔”的方式教大家如何安装Jupyter Notebook、pip和Python,以及对于Jupyter Notebook代码路径的基本设置。

保证安全,保证寿终正寝的博客 13万+

spring中的AOP

aop指面向切面编程,在不改变源文件的前提下,对目标对象进行增。底层通过动态代理实现。

xbgRS的博客 212

Python爬虫实战:西瓜视频m3u8解析与FFmpeg下载合并

网络爬虫与流媒体解析是Python工程实践中的常见需求,其核心在于通过HTTP请求获取数据并解析特定格式。m3u8作为HLS协议索引文件,将视频切分为ts分片,便于流式传输。结合FFmpeg的多线程处理能力,可高效完成分片下载与合并,技术价值在于提升视频处理效率。典型应用场景包括视频下载、离线缓存等。本文以西瓜视频为例,详细讲解如何使用requests库提取m3u8地址,并调用FFmpeg批量下载ts分片合并为mp4,涵盖请求伪装、索引解析及常见问题排查。

weixin_31856057的博客 15万+

深入理解 Spring AOP:核心概念、实现机制与常见陷阱

本文系统介绍了Spring AOP的核心概念与实现机制。AOP通过切面(Aspect)、连接点(Join Point)、切入点(Pointcut)和通知(Advice)等概念,将横切关注点模块化。Spring AOP基于代理模式实现,支持JDK动态代理和CGLIB两种方式。文章详细对比了Spring AOP与AspectJ的区别,并针对常见问题如同类方法调用失效、切面未生效、执行顺序混乱等提供了解决方案。最后总结了AOP的最佳实践,强调要合理使用这一强大工具,避免过度使用导致代码复杂度增加。

刘一说的IT专栏 841

使用MATLAB/Simulink对一个简单的智能家居温湿度监测与控制系统进行建模和仿真

目录手把手教你学Simulink——基于Simulink的智能家居温湿度监测与控制仿真建模示例一、背景介绍二、所需工具和环境三、步骤详解步骤1:创建Simulink模型步骤2:构建传感器模块步骤3:添加控制器步骤4:构建执行器模块步骤5:连接各部分步骤6:设置仿真参数步骤7:添加观测器步骤8:运行仿真并分析结果四、总结 智能家居系统中的温湿度监测与控制系统是一个典型的物联网(IoT)应用场景,它通过传感器收集环境数据,并根据预设条件自动调节室内温度和湿度以提高居住舒适度。本指南将介绍如何使用MATLAB/S

xiaoheshang_123的博客 291

uniapp [安卓苹果App端] - errMsg“: “request:fail abort statusCode:-1 不支持的URL(-1002)Uniapp真机运行APP网络请求报错失败排查

uniapp真机运行APP,网络请求报错errMsg“: “request:fail abort statusCode:-1 不支持的URL(-1002),uni.request网路请求报错,uniApp解决请求接口报错,uniapp app端打包上线后请求报错,真机运行测试请求失败,uniapp安卓app请求报错,uniapp苹果ios平台网络请求报错,uniapp真机预览请求失败怎么办,不是跨域问题,在H5中请求可以正常发送和接收,但在真机APP上请求报错,Hbuilder真机运行app网络请求报错,全

🏆 前端领域优质创作者 3089

Spring 之 AOP

AOP面向切面编程,其目的是为了解决重复代码和类耦合问题。AOP说明白了就是将重复代码抽象到一个切面中,然后我们哪里需要的时候就将这个切面切入到指定位置。AOP的本质是通过代理模式来实现的。在Spring中实现代理模式的方法有两种Jdk动态代理和cglib动态代理。其中jdk动态代理是基于接口来实现的,cglib的基于类来实现的、AOP动态代理实在初始化之后来实现的。...

qq_44851477的博客 170

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Spring(3)(AOP)

版本:idea2020.1.1 jdk1.8 maven3.6.3 注:本文章摘自Java EE企业级应用开发教程,黑马程序员/编著,仅用于记录学习笔记,分享学习经历。 一、AOP术语 Aspect(切面):在实际应用中,切面通常是指封装的用于横向插入系统功能(如事务、日志等)的类。该类要被Spring容器识别为切面,需要在配置文件中通过<bean>元素指定。 Joinpoint(连接点):在程序执行过程中的某个阶段点,它实际上是对象的一个操作,例如方法的调用或异常的抛出。在S...

qq_44759192的博客 292

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Spring-Aop

前言: 前面我们介绍了Spring的IOC容器,接下来,本篇要讲述的是Spring中另外一个常用的模块AOP。 AOP简介 AOP(面向切面编程)是对OOP中遇到的一些问题的补充,是OOP的扩展,在不改变原有代码的情况下增加新的功能,比如我们常见的日志功能,权限,异常处理,缓存等公共业务(即与软件的开发业务没有关联)。 AOP概念 Joinpoint(连接点):所谓连接点是指那些可被拦截到的点。在Spring中,这些点指的是方法,因为Spring只支持方法类型的连接点。 Pointcut(切入点):

awake_lqh的博客 240

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

深入源码解析spring aop实现的三个过程

Spring AOP的面向切面编程,是面向对象编程的一种补充,用于处理系统中分布的各个模块的横切关注点,比如说事务管理、日志、缓存等。它是使用动态代理实现的,在内存中临时为方法生成一个AOP对象,这个对象包含目标对象的所有方法,在特定的切点做了增强处理,并回调原来的方法。 Spring AOP的动态代理主要有两种方式实现,JDK动态代理和cglib动态代理。JDK动态代理通过反射来接收被代理的类...

技术研究中心 333

Spring AOP 与 动态代理

    前端时间,去参加网易的实习生招聘,面试官问了一个Spring AOP相关的问题:如果有一个没被 aspect 织入的函数A去调用被 aspect 织入的函数B,那么函数A在执行时会有函数B的织入效果吗?    当时是这个问题没有回答上来,确实没有试过这种情况。现在就来试试这种情况,以及分析一下Spring AOP的相关原理。我们都知道Spring AOP中使用的是动态代理的技术,其中包括了...

Hao_C的专栏 527

第三章 Spring AOP

1、下列有关AOP专业术语中,用于表示切面与程序流程的交叉点的是()。 A、Joinpoint B、Pointcut C、Aspect D、Advice 参考答案 :BD 2、以下有关CGLIB代理相关说法正确的是(‘D’)。 A、CGLIB代理的使用非常简单,但它还有一定的局限性——使用动态代理的对象必须实现一个或多个接口 B、如果要对没有实现接口的类进行代理,那么可以使用JDK代理 C、CGLIB是一个高性能开源的代码生成包,在使用时需要另外导入CGLIB所需要的包 D、Spring中的AOP代理,可以

weixin_46066900的博客 4634

Spring专题--AOP

https://www.cnblogs.com/zhangxufeng/p/9160869.html AOP的主要角色 Aspect:切面,pointcut+advice; Join point:连接点,增强的目标方法,目标对象上切入的具体位置 Pointcut:切点,用于定义切入哪些位置,定义了连接点集合 Advice:通知,也即切面逻辑,指定了当前用于切面的业务模块。locatio...

小虾米的博客 375

动态参数 maven_让我们来揭开 AOP 和动态代理技术的神秘面纱

AOP 是什么东西首先来说 AOP 并不是 Spring 框架的核心技术之一,AOP 全称 Aspect Orient Programming,即面向切面的编程。其要解决的问题就是在不改变源代码的情况下,实现对逻辑功能的修改。常用的场景包括记录日志、异常处理、性能监控、安全控制(例如拦截器)等,总结起来就是,凡是想对当前功能做变更,但是又不想修改源代码的情况下,都可以考虑是否可以用 AOP 实现。...

weixin_42515058的博客 132

Spring系列(四):Spring AOP详解

一、AOP是什么   AOP(面向切面编程),可以说是一种编程思想,其中的Spring AOP和AspectJ都是现实了这种编程思想。相对OOP(面向过程编程)来说,提供了另外一种编程方式,对于OOP过程中产生的横切性问题,这些横切性与业务无关,可以通过预编译方式和运行期动态代理来实现。比如可以应用在:日志记录、性能监控、事务管理等。 二、AOP的基本概念   Aspect(切面)...

dijinan2423的博客 245
上一篇: ThradLocal原理解析及SpringSecurity无法在子线程中获取上下文信息解决
Simpier
博客等级 码龄7年 2粉丝 5原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值