Spring开启注解AOP的支持放置的位置

放在springmvc的aop,需要在springmvc的配置文件中写开启aop,而不是spring的配置文件

最近使用aop来记录controller的日志.
但是发现没有起作用.
后来发现是因为我的 aop 是写在controller层(在springmvc的容器中 -web中)
而开启aop配置却写在spring(applicationContext.xml)中,
所以不起作用,需要在springmvc.xml的配置文件中也开启才行

### 如何在 Spring AOP 中使用注解传递参数 为了实现在 Spring AOP 中通过注解传递参数,通常会结合自定义注解和切面编程来达到目的。下面是一个详细的例子展示如何创建并应用这样的功能。 #### 创建自定义注解 首先,在项目中定义一个新的注解 `CheckParam` 来标记需要验证的方法参数: ```java import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Target(ElementType.PARAMETER) @Retention(RetentionPolicy.RUNTIME) public @interface CheckParam { String value(); } ``` 此部分描述了如何构建一个简单的自定义注解用于后续操作[^1]。 #### 编写 Aspect 切片类 接着编写一个切面类 `ParameterValidationAspect` 实现具体的拦截逻辑: ```java import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.springframework.stereotype.Component; @Aspect @Component public class ParameterValidationAspect { @Around("@annotation(checkParam)") public Object validateParameters(ProceedingJoinPoint joinPoint, CheckParam checkParam) throws Throwable { // 获取方法参数名及其对应的值 Object[] args = joinPoint.getArgs(); for (Object arg : args) { if(arg instanceof String && ((String)arg).isEmpty()){ throw new IllegalArgumentException("Invalid argument: " + checkParam.value()); } } return joinPoint.proceed(args); } } ``` 上述代码展示了如何设置环绕通知(`@Around`)以及获取目标方法的实际参数列表,并对其进行简单有效性检查[^4]。 #### 应用到 Controller 方法上 最后可以在控制器层面上的应用场景如下所示: ```java @RestController @RequestMapping("/api") public class MyController { @PostMapping("/example") public ResponseEntity<String> example(@RequestParam(value="name", required=false) @CheckParam("Name cannot be empty") String name){ return ResponseEntity.ok("Hello "+name); } } ``` 这里将之前定义好的 `CheckParam` 注解放置到了请求映射函数的参数位置处,当接收到 HTTP 请求时就会触发相应的前置处理流程。 #### 添加必要的 Maven 依赖项 确保项目的 `pom.xml` 文件里包含了正确的 Spring AOP 和其他所需库的支持: ```xml <dependencies> <!-- Spring AOP dependency --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.3.10</version> </dependency> <!-- Other dependencies as needed... --> </dependencies> ``` 这一步骤保证了应用程序能够正确加载所需的框架组件以支持AOP特性[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值