spring中aop用到了什么机制

fiy 其他 23

回复

共3条回复 我来回复
  • fiy的头像
    fiy
    Worktile&PingCode市场小伙伴
    评论

    Spring中AOP(Aspect-Oriented Programming,面向切面编程)用到了以下两个机制:

    1. 代理模式(Proxy Pattern):
      在Spring的AOP中,切面(Aspect)的功能是通过生成代理对象来实现的。代理模式是指由一个对象(代理对象)来控制对另一个对象(目标对象)的访问。在Spring中,代理对象就是切面,它会拦截目标对象的方法调用,执行额外的逻辑(例如记录日志、权限验证等),然后再将调用转发给目标对象。

    在Spring中,AOP的代理模式有两种实现方式:JDK动态代理和CGLIB动态代理。JDK动态代理基于接口生成代理对象,而CGLIB动态代理则是通过继承目标对象生成代理对象。这两种代理方式都可以在Spring中进行配置选择。

    1. 面向切面编程(Aspect-Oriented Programming):
      面向切面编程是一种编程范式,它通过将横切关注点(例如日志记录、事务管理等)从核心业务逻辑中分离出来,实现了关注点和业务逻辑的解耦。在Spring中,通过定义切面,可以把通用的横切逻辑应用到多个不同的业务逻辑上,从而提高代码的重用性和可维护性。

    在Spring的AOP中,切面由切点(Pointcut)和增强(Advice)组成。切点定义了在哪些连接点(Join Point)上应用切面,而增强定义了在连接点上执行的额外逻辑。Spring提供了多种类型的增强,包括前置增强(Before Advice)、后置增强(After Advice)、环绕增强(Around Advice)等。

    除了代理模式和面向切面编程,Spring的AOP还涉及到其他一些机制,例如:

    • 动态代理:Spring通过使用动态代理技术,在运行时生成代理对象;
    • 连接点:连接点是在应用程序执行过程中能够插入切面的点,例如方法调用、异常处理等;
    • 切点表达式:切点表达式用于定义切点的匹配规则,以确定在哪些连接点上应用切面;
    • Advisor和Advice:Advisor是切面实现的容器,Advice是切面实际执行的操作;
    • 织入:织入是将切面的功能应用到目标对象中的过程。

    综上所述,Spring的AOP通过代理模式和面向切面编程实现了对目标对象的拦截和增强功能。通过这些机制,开发者可以更加灵活和方便地实现横切逻辑,提高代码的可维护性和可重用性。

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

    在Spring中,AOP(面向切面编程)使用了以下几个机制:

    1. 动态代理:Spring AOP使用动态代理来实现AOP的功能。在运行时,Spring通过使用Java动态代理或CGLIB创建一个代理对象,将原始对象包装在代理对象中。当调用代理对象的方法时,可以在方法执行前、执行后或异常抛出时插入额外的逻辑。

    2. 切点:切点是指在哪些方法或类上应用AOP增强。切点是使用切点表达式来定义的,切点表达式语言可以根据方法的名称、参数、返回类型等来指定切点。

    3. 通知(Advice):通知是AOP增强的具体逻辑。在Spring AOP中,有以下几种类型的通知:

      • 前置通知(Before advice):在目标方法执行前执行的通知。
      • 后置通知(After advice):在目标方法执行后执行的通知。
      • 返回通知(After-returning advice):在目标方法返回结果后执行的通知。
      • 异常通知(After-throwing advice):在方法抛出异常后执行的通知。
      • 环绕通知(Around advice):在目标方法执行前后都可以执行的通知。
    4. 切面(Aspect):切面是由切点和通知组成的。切面用于将一组通知应用到指定的切点上。

    5. 织入(Weaving):织入是将切面应用到目标对象的过程。Spring中有两种织入方式:

      • 编译时织入(Compile-time weaving):在编译阶段将切面应用到目标对象中。
      • 运行时织入(Runtime weaving):在目标对象被加载到内存中时,动态地将切面应用到目标对象中。

    综上所述,Spring中的AOP通过动态代理、切点、通知、切面和织入等机制来实现。这些机制共同作用,使得开发者可以通过定义切点和通知,将横切关注点与业务逻辑解耦,并在运行时动态地将切面应用到目标对象中。

    1年前 0条评论
  • worktile的头像
    worktile
    Worktile官方账号
    评论

    在Spring中,AOP(面向切面编程)是通过动态代理机制来实现的。具体来说,Spring AOP使用了JDK动态代理和CGLIB动态代理两种代理机制。

    1. JDK动态代理:JDK动态代理是基于接口的代理。当目标对象实现了至少一个接口时,Spring AOP会使用JDK动态代理来生成代理对象。在运行时,通过创建一个实现InvocationHandler接口的代理对象,在代理对象的方法执行前后进行增强处理。

    操作流程:

    • 定义一个切面类,使用@Aspect注解声明。
    • 在切面类中定义通知方法,使用@Before、@After、@Around等注解指定增强逻辑。
    • 在配置文件中声明切面,并开启AOP的自动代理。
    • 使用接口来定义目标类,并实现这些接口。
    • 在程序中通过Spring容器获取代理对象,并调用方法。
    1. CGLIB动态代理:CGLIB动态代理是基于类的代理。当目标对象没有实现接口时,Spring AOP会使用CGLIB动态代理来生成代理对象。CGLIB通过创建目标对象的子类来实现代理,并在子类中重写目标类的方法,实现增强逻辑。

    操作流程:

    • 定义一个切面类,使用@Aspect注解声明。
    • 在切面类中定义通知方法,使用@Before、@After、@Around等注解指定增强逻辑。
    • 在配置文件中声明切面,并开启AOP的自动代理。
    • 使用类来定义目标类。
    • 在程序中通过Spring容器获取代理对象,并调用方法。

    总结:
    无论是JDK动态代理还是CGLIB动态代理,Spring AOP都是通过动态生成代理对象来实现对目标对象方法的增强。JDK动态代理适用于有接口的情况,而CGLIB动态代理适用于没有接口的情况。Spring AOP提供了简单易用的方式来实现切面编程,可以方便地在方法执行前、中、后进行增强处理。

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

400-800-1024

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

分享本页
返回顶部