关于SpringAop及其动态代理技术

简述:

        Spring AOP(Aspect-Oriented Programming,面向切面编程)是 Spring 框架的一个重要特性,它允许开发者通过定义切面(Aspect)来实现横切关注点(Cross-cutting Concerns)的模块化。横切关注点是指那些影响多个类的行为,如日志记录、事务管理、安全性检查等。

核心概念:

  1. 切面(Aspect):

    切面是一个模块化的单元,包含了通知(Advice)和切点(Pointcut)。切面用于定义在何时、何处应用横切关注点。

  2. 通知(Advice):

    通知定义了切面在特定连接点(Join Point)上执行的动作。Spring 支持多种类型的通知,包括前置通知(Before)、后置通知(After)、返回通知(After-returning)、异常通知(After-throwing)和环绕通知(Around)。

  3. 切点(Pointcut):

    切点定义了通知应该在哪些连接点上执行。切点通过表达式来匹配特定的方法调用或类实例化等。

  4. 连接点(Join Point):

    连接点是程序执行过程中的一个特定点,如方法调用、异常抛出等。在 Spring AOP 中,连接点总是代表方法执行。

  5. 引入(Introduction):

    引入允许向现有的类添加新的方法或属性。Spring AOP 允许你为 Bean 引入新的接口及其实现。

  6. 目标对象(Target Object):

    目标对象是被一个或多个切面通知的对象。也称为被通知对象。

  7. AOP 代理(AOP Proxy):

    Spring AOP 使用 JDK 动态代理或 CGLIB 代理来实现切面。在运行时,AOP 代理会拦截方法调用,并在必要时应用通知。

  8. 织入(Weaving):

    织入是将切面应用到目标对象以创建新的代理对象的过程。织入可以在编译时、加载时或运行时进行。Spring AOP 在运行时进行织入。

使用场景:

  • 日志记录:在方法调用前后记录日志。

  • 事务管理:在方法调用前后开启和提交事务。

  • 安全性检查:在方法调用前进行权限验证。

  • 性能监控:记录方法的执行时间。

  • 缓存管理:在方法调用前后进行缓存操作。

总结:

        Spring AOP 提供了一种强大的机制来模块化横切关注点,使得代码更加清晰和易于维护。通过使用切面、通知和切点,开发者可以专注于业务逻辑,而将横切关注点分离出来,提高代码的模块化和可重用性。

动态代理技术

简述:

        Spring AOP(Aspect-Oriented Programming,面向切面编程)通过动态代理技术来实现横切关注点的模块化。动态代理允许在运行时创建代理对象,这些代理对象在调用目标对象的方法时,可以应用切面逻辑。Spring AOP 支持两种主要的动态代理技术:JDK 动态代理和 CGLIB 代理。

  1. JDK 动态代理

    JDK 动态代理是基于接口的代理技术。它要求目标对象必须实现一个或多个接口。JDK动态代理通过(java.lang.reflect.Proxy)类和(java.lang.reflect.InvocationHandler)接口来实现。

  2. CGLIB 代理:

    CGLIB(Code Generation Library)代理是基于类的代理技术。它不需要目标对象实现接口,而是通过生成目标类的子类来实现代理。CGLIB 使用 net.sf.cglib.proxy.Enhancer 类来创建代理对象。

注意:Spring AOP 默认使用 JDK 动态代理,但如果目标对象没有实现接口,Spring 会自动切换到 CGLIB 代理。可以通过配置强制使用 CGLIB 代理。

总结:

        Spring AOP 通过动态代理技术实现了横切关注点的模块化,使得开发者可以专注于业务逻辑,而将横切关注点分离出来。JDK 动态代理基于接口,适用于目标对象实现了接口的情况;CGLIB 代理基于类,适用于目标对象没有实现接口的情况。Spring AOP 根据目标对象的特性自动选择合适的代理技术,也可以通过配置强制使用 CGLIB 代理。

  • 15
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值