在一开始的学习spring就曾涉及过aop的编写 那么springBoot环境下的利用注解是怎么实现的。
附上DemonstrationAop.java 源码分析:
@Aspect
@Component
public class DemonstrationAop {
@Autowired
private RedisUtil redisUtil;
@Pointcut("@annotation(io.swagger.annotations.ApiOperation)")
public void pointCut() {
}
@Around("pointCut()")
public Object around(ProceedingJoinPoint pjp) throws Throwable{
Object object;
Signature signature = pjp.getSignature();
//根据访问IP地址区分开启演示模式的用户
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
String host = request.getRemoteHost();
Object o = redisUtil.get("showDataUser" + ":" + host);
if (o == null) {
//未开启演示模式
object = pjp.proceed();
} else {
//开启演示模式
String key = signature.getDeclaringTypeName() + "." + signature.getName();
//演示数据
String showData = (String) redisUtil.hmGet("showData", key);
if (ToolUtil.isEmpty(showData)) {
object = pjp.proceed();
redisUtil.hmSet("showData", key, JSON.toJSONString(object));
} else {
object = JSON.parseObject(showData, ResponseData.class);
}
}
return object;
}
}
把用户对象放到session中,在判断是否为当前用户这种情况下就比较常用
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
用RequestContextHolder中的ServletRequestAttributes来存放「用于存放用户信息的session」
aop编写可以把参数校验的这一功能穿插进去。写一个注解类