设置基本 Spring AOP 配置

Setting up basic Spring AOP configuration

我正在学习 Spring 的 AOP,遵循 this 教程,但不知何故我无法使其工作。我希望我所做的唯一修改是让它与控制器一起工作。

目录结构

-/java
    -/com.example.spring_aop
        -/aspects
            -LoggingAspect.java
        -/controllers
            -AddController.java
        -SpringAopApplication.java
-/resources
    -beans.xml

AddController.java

@RestController
public class AddController {

    @GetMapping(value = "/{a}+{b}", produces = MediaType.APPLICATION_JSON_VALUE)
    public Map add(@PathVariable("a") int a, @PathVariable("b") int b) {
        int result = a+b;
        return Collections.singletonMap("result", result);
    }
}

LoggingAspect.java

@Component
@Aspect
public class LoggingAspect {
    private Logger logger = LoggerFactory.getLogger(this.getClass());

    @Before("execution( * com.example.spring_aop.controllers..*.*(..) )")
    public void before(JoinPoint joinPoint) {
        logger.info(" ###### before executing method: {} of class: {}",
                joinPoint.getSignature().getName(), joinPoint.getTarget().getClass().getName());
    }

    @AfterReturning(pointcut = "execution( * com.example.spring_aop.controllers..*.*(..) )",
            returning = "result")
    public void after(Object result) {
        logger.info(" ###### method returned: {}", result);
    }
}

pom.xml

Spring Web auto-generated (Spring Initializr) pom with one added dependency:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-aop</artifactId>
</dependency>

通过 xml 选择基于注释的配置解决了这个问题。我的问题中出现的 AspectJ 注释实际上已经足够了,所以我只是删除了 beans.xml 配置并且它按预期工作。