Spring AOP 实战经验
重构前
/**
* 获取栏目下的专辑
*
* @return
*/
@RequestMapping("category_albums.do")
@ResponseBody
public Result listCategoryAlbums(@RequestParam int categoryId, @RequestParam int page) {
//防止客户端忘记传page的值,默认1
if (page <= 0) {
page = Constant.DEFAULT_PAGE;
}
//准备数据
String redisKey = RedisKeys.TV_VIDEO_CATEGORY_ALBUM_DETAIL;
int expireTime = CommonConstants.API_CACHE_EXPIRE_INTERVAL;
// 从redis中获得对象实体
AlbumsVo albumData = redisManager.getDataFromRedis(AlbumsVo.class, redisKey, categoryId,
page);
if (null == albumData) {
albumData = albumService.getCatagoryAlbumsData(categoryId, page,
CommonConstants.PAGENUM);
redisManager.setDataToRedisAsync(albumData, expireTime, redisKey, categoryId, page);
} else {
albumBlockedCache.clearBlocked(albumData.getAlbumList());
}
return new Result(albumData);
}重构思路
重构步骤
标记要拦截的方法
自定义注解
在目标方法上使用注解
编写拦截器
配置 spring 使拦截生效
重构原代码
redis 穿透
总结
Last updated