Skip to content

AOP 控制器

一、基本概念

在 Java 开发中,AOP(Aspect-Oriented Programming,面向切面编程)是一种编程范式,它通过在程序运行期间动态地将横切关注点(cross-cutting concerns)与核心业务逻辑进行解耦,从而提高了代码的模块化和可维护性。AOP 通过将横切关注点抽象为切面(Aspect),并在需要的地方将切面织入到应用程序中,以实现对特定行为的统一处理。

在 Spring 框架中,AOP 是一个重要的功能模块,它可以帮助开发人员更轻松地实现诸如日志记录、事务管理、安全控制等横切关注点。在 Spring MVC 中,控制器(Controller)是 MVC 模式中的一个组件,负责接收 HTTP 请求并将其转发给合适的处理程序(Handler)。通过结合 AOP 和控制器,可以实现对控制器中特定方法的横切关注点的统一处理。

下面是一个简单的示例,演示了如何使用 AOP 在 Spring MVC 中控制器中添加日志记录功能:

java
// 定义切面类,实现日志记录功能
@Component
@Aspect
public class LoggingAspect {

    @Before("execution(* com.example.controller.*.*(..))")
    public void logBefore(JoinPoint joinPoint) {
        System.out.println("Logging before method: " + joinPoint.getSignature().getName());
    }

    @AfterReturning(pointcut = "execution(* com.example.controller.*.*(..))", returning = "result")
    public void logAfterReturning(JoinPoint joinPoint, Object result) {
        System.out.println("Logging after returning from method: " + joinPoint.getSignature().getName());
    }
}

// 定义控制器类
@RestController
public class MyController {

    @GetMapping("/hello")
    public String hello() {
        return "Hello World";
    }
}

在上述示例中,LoggingAspect 类定义了一个切面,其中的 logBefore 和 logAfterReturning 方法分别在控制器中的方法执行前后记录日志。通过在方法上使用@Aspect 注解声明该类为切面,并在切面方法上使用@Before 和@AfterReturning 等注解定义切点和通知类型。然后,在控制器类中的 hello 方法上添加@GetMapping 注解,将该方法映射为处理 GET 请求的处理程序,当客户端发送 GET 请求时,LoggingAspect 中定义的切面将被织入到 hello 方法中,从而实现对该方法的日志记录功能。

二、事务

  • 分类
    • 申明式事务
    • 编程式事务
  • 传播行为
    • require
    • require_new
    • supports
    • not_supports
    • never
    • nested
    • mandatory
  • 隔离级别
    • 允许脏读
    • 读已提交
    • 可重复度
    • 序列化