spring的面向切面编程底层技术有哪些

回复

共3条回复 我来回复
  • worktile的头像
    worktile
    Worktile官方账号
    评论

    Spring的面向切面编程(Aspect-Oriented Programming,简称AOP)是一种程序设计思想,它可以通过在应用程序中定义切面(Aspect),并将它们应用于程序的各个部分,从而在不改变原有代码的情况下,实现对程序行为的增强或修改。

    Spring实现AOP的底层技术主要有以下几种:

    1. 代理模式:Spring AOP通过动态代理来实现切面的功能。可以使用JDK提供的动态代理机制(基于接口的代理)或者使用CGLib实现的子类代理(基于继承的代理)来创建代理对象。动态代理在运行时生成代理对象,将切面插入到目标对象的方法调用中。

    2. 连接点(Join Point):连接点是程序中可以插入切面的点,比如方法调用、方法入口、方法返回等。Spring使用连接点作为切面逻辑要插入的位置。

    3. 切点(Pointcut):切点是一个表达式,用于选择连接点的集合。Spring使用AspectJ的切点表达式语言来定义切点。

    4. 通知(Advice):通知是切面在特定连接点上执行的动作。Spring提供了五种类型的通知:前置通知(Before Advice)、后置通知(After Advice)、返回通知(After-Returning Advice)、异常通知(After-Throwing Advice)和环绕通知(Around Advice)。

    5. 切面(Aspect):切面是一个横切关注点的模块化单元。它包含了切入点和通知,描述了在何处和何时应用通知。

    6. 织入(Weaving):织入是将切面应用到目标对象中的过程。织入可以在编译时、加载时或者运行时进行,Spring AOP使用运行时织入。

    总结来说,Spring的面向切面编程底层技术主要涉及代理模式、连接点、切点、通知、切面和织入等概念。通过这些技术的组合应用,Spring能够实现在应用中定义和管理横切关注点,并在需要的位置插入切面的功能。

    1年前 0条评论
  • 不及物动词的头像
    不及物动词
    这个人很懒,什么都没有留下~
    评论

    Spring的面向切面编程(AOP)底层技术涉及以下几个方面:

    1. 动态代理:Spring AOP基于JDK的动态代理与CGLIB字节码生成库实现。动态代理技术通过在运行时动态生成代理类来拦截方法调用,并在前后插入切面逻辑。JDK的动态代理要求被切入的目标对象必须实现一个或多个接口,而CGLIB则是通过生成目标对象的子类来实现动态代理。

    2. 切点(Pointcut)表达式:切点是指在目标对象上定义的连接点,同过切点表达式,可以确定哪些方法应该被拦截。Spring AOP使用AspectJ风格的切点表达式,可以通过指定类的路径、方法的名称和参数来定义切点。

    3. 通知(Advice):通知是在切点上执行的逻辑代码。Spring AOP提供了五种类型的通知:前置通知(Before advice)、后置通知(After advice)、返回通知(After-returning advice)、异常通知(After-throwing advice)和环绕通知(Around advice)。不同类型的通知在目标方法执行的不同阶段被执行。例如,前置通知在目标方法执行之前执行,后置通知在目标方法执行之后执行。

    4. 切面(Aspect):切面是切点和通知的组合体,它描述了在何处和何时应该执行通知。切面可以被认为是一种横切关注点的模块化实现。在Spring AOP中,切面通过指定切点和通知来创建,并在程序中通过注解或配置文件进行声明和配置。

    5. 织入(Weaving):织入是将切面应用到目标对象中,并创建代理对象的过程。织入可以在编译时通过源代码进行,也可以在类加载时通过字节码进行,还可以在运行时通过动态代理实现。Spring AOP的织入是在运行时进行的,通过创建代理对象来实现切面的动态绑定。

    1年前 0条评论
  • fiy的头像
    fiy
    Worktile&PingCode市场小伙伴
    评论

    Spring的面向切面编程(AOP)底层技术主要包括以下几个方面:

    1. 动态代理:动态代理是AOP技术的基础,通过生成代理对象来实现切面逻辑的织入。Spring中使用JDK动态代理和CGLIB动态代理两种方式实现AOP。

    2. 反射API:AOP的实现需要通过反射API来调用目标方法,获取目标方法的参数、返回值等信息。

    3. 注解和注解处理器:Spring中提供了一系列的注解和相应的注解处理器,用于标识切入点、切面、通知等,以及处理相应的逻辑。

    4. 代理工厂:Spring通过代理工厂来创建代理对象,代理工厂内部使用了动态代理和反射等技术。

    5. 拦截器和拦截链:Spring使用拦截器和拦截链来实现切面逻辑的织入。拦截器是AOP中的一个重要概念,它负责在目标方法执行前后进行一些额外的处理。

    6. 切入点表达式语言:Spring使用切入点表达式语言来定义切入点,切入点表达式语言可以匹配目标方法的执行点。

    下面将对每个底层技术做详细的介绍:

    1. 动态代理:
    • JDK动态代理:JDK动态代理是指通过Java反射机制生成代理类和代理对象的方式来实现AOP。在Spring中,如果目标类实现了接口,Spring会使用JDK动态代理。JDK动态代理通过实现InvocationHandler接口,将目标类的方法调用委托给代理对象的invoke()方法,在invoke()方法中可以加入切面逻辑。

    • CGLIB动态代理:CGLIB动态代理是指通过字节码技术生成目标类的子类作为代理对象的方式来实现AOP。在Spring中,如果目标类没有实现接口,或者强制使用CGLIB动态代理,Spring会使用CGLIB动态代理。CGLIB动态代理通过继承目标类,重写目标类的方法,并在重写的方法中加入切面逻辑。

    1. 反射API:
      反射API是Java语言提供的一组API,可以在运行时动态地获取类的信息、调用类的方法、获取和修改类的字段等。在AOP中,通过反射API可以获取目标方法的相关信息,并通过反射调用目标方法。在Spring中,通过反射API可以获取目标方法的参数、返回值、注解等信息,以及调用目标方法。

    2. 注解和注解处理器:
      Spring提供了一系列的注解,用于标识切入点、切面、通知等。常用的注解包括@Aspect、@Pointcut、@Before、@After、@Around等。这些注解用于给方法或类加上相应的标记,Spring会通过注解处理器来解析这些注解,并在运行时进行相应的逻辑处理。

    3. 代理工厂:
      在Spring中,通过代理工厂来创建代理对象。代理工厂内部使用了动态代理和反射等技术来生成代理对象。代理工厂需要知道目标类、切面逻辑等信息,并根据这些信息生成代理对象。

    4. 拦截器和拦截链:
      拦截器是AOP中的一个重要概念,用于拦截和处理目标方法的调用。拦截器可以在目标方法执行前后进行一些额外的处理,例如记录日志、进行性能监控等。拦截链是由一系列的拦截器组成的,按照一定的顺序依次执行拦截器的逻辑。

    5. 切入点表达式语言:
      切入点表达式语言是Spring中用于定义切入点的一种方式。切入点表达式语言可以匹配目标方法的执行点,例如匹配某个包下的所有方法,或者匹配带有特定注解的方法等。切入点表达式语言使用类似于正则表达式的语法来描述切入点的匹配规则。

    1年前 0条评论
注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部