Spring Aop

1.基本概念:

      Spring AOP(面向切面编程) 是 Spring 框架的一个重要功能,它允许在 Spring 应用程序中对横切关注点(Cross-Cutting Concerns)进行模块化。横切关注点是指那些影响多个类或模块的功能,比如日志记录、事务管理、安全性和异常处理等。

        AOP是面向切面编程,它是对某一类事情的集中处理,它是一种思想,而Spring AOP是对这个思想的具体实现     

2.关键概念:

        (1).Aspect(切面):切面是一个模块,它封装了多个类所共同关注的功能,比如日志记录、安全性和事务管理。

        (2).Join Point(连接点):程序执行的某个点,比如方法的执行或异常的处理。

        (3).Advice(通知):在特定的连接点采取的操作。通知是切面中的实际操作部分。Spring AOP 中有以下几种类型的通知:

 Before Advice(前置通知):在目标方法执行之前执行,不能阻止目标方法的执行。
 After Returning Advice(返回后通知):在目标方法正常完成后执行。
 After Throwing Advice(异常通知):在方法抛出异常后执行。
 After (Finally) Advice(最终通知):无论方法执行是正常返回还是抛出异常,都会执行。
 Around Advice(环绕通知):在目标方法执行之前和之后执行,还可以选择不执行目标方法。

        (4).Pointcut(切入点):定义在什么位置(哪些方法或类)插入切面逻辑。

        (5).Introduction(引入):允许向现有的类添加新方法或属性。

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

3.使用

在 Spring 中使用 AOP 时,通常需要做以下几步:

        (1)定义一个切面类,该类包含通知逻辑。

        (2)定义切入点表达式,用于指定在哪些连接点应用通知

        (3)将切面类和切入点配置到 Spring 容器中。这可以通过注解(例如 @Aspect@Pointcut)或 XML 配置完成。

        (4)配置 AOP 代理,Spring AOP 使用代理模式来创建 AOP 代理对象。

4.示例:

        

@Aspect
@Component
public class LoggingAspect {

    // 定义一个切入点表达式
    @Pointcut("execution(* com.example.service.*.*(..))")
    public void serviceLayer() {}

    // 前置通知
    @Before("serviceLayer()")
    public void logBefore(JoinPoint joinPoint) {
        System.out.println("Executing method: " + joinPoint.getSignature().getName());
    }

    // 返回后通知
    @AfterReturning(pointcut = "serviceLayer()", returning = "result")
    public void logAfterReturning(JoinPoint joinPoint, Object result) {
        System.out.println("Method executed successfully: " + joinPoint.getSignature().getName());
        System.out.println("Result: " + result);
    }
}

上面的例子展示了一个简单的日志切面,应用于 com.example.service 包中的所有方法。

5.总结:

        通过使用 Spring AOP,我们可以将日志记录逻辑与业务逻辑分离,从而提高代码的可维护性和可重用性。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值