关于热部署和切面方法的问题解决

今天在使用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等可以指定添加了那些注解的方法作为增强对象
参照

https://www.cnblogs.com/liaojie970/p/7883687.html

5种注解使用方式

https://blog.csdn.net/u010502101/article/details/78823056

不进入增强方法用around

https://blog.csdn.net/zhanglf02/article/details/78132304