今天在使用AOP切面方法对指定方法进行增强的时候有个异常问题,折腾了很久,网上找了很多博客和解答,都找不到有用的,终于,凭着自己的第六感,找到了问题所在。
原因就是 我使用JRebel热部署,然后对切面方法进行了修改,修改了方法的返回类型(不知道修改方法内容会不会,应该不会),然后运行时就会抛出以下异常:
具体代码如下
我把项目停止重新运行后,成功解决
这里就顺便写一下springboot使用aop的方法叭
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
直接粘代码叭
package com.me.aspectj;
import com.me.beans.ReturnMessage;
import com.me.security.TokenCreater;
import com.me.utils.RedisUtil;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
* @ClassName TokenAspectJ
* @Description 在用户或管理员的请求前对token进行验证
* @Author xufeng
* @Data 2019/3/1 18:05
* @Version 1.0
**/
@Aspect
@Component
public class TokenAspectJ {
@Pointcut("execution(public * com.me.controller.UserController.*(..))")
private void aop1(){}
@Pointcut("execution(public * com.me.controller.ManagerController.*(..))")
private void aop2(){}
@Autowired
private RedisUtil redisUtil;
@Around("aop1() || aop2()")
public Object doAround(ProceedingJoinPoint joinPoint) throws Throwable {
Object[] obj = joinPoint.getArgs();
Object result;
String token = (String) obj[obj.length-1];
if (redisUtil.get((String) TokenCreater.parseJWT(token).get("id")).equals(token)){
result = joinPoint.proceed();
return result;
}
return new ReturnMessage(true,401);
}
}
代码格式不知道怎么总是乱
pointcut注解里,可以用多种参数
除了最常用的execution,还有args等可以指定添加了那些注解的方法作为增强对象
参照
5种注解使用方式
不进入增强方法用around