介绍一下,代理模式。
其实代理模式是我们最常用的,在任何框架中几乎都离不开代理模式的应用。
话不多说,直接上一个代码理解一下。
定义一个controller层。
private final CacheUserServiceImpl cacheUserService;
/**
* 代理模式
* @return
*/
@GetMapping("/proxyMode")
public ResponseResult proxyMode(){
// 使用你代理客户端
ResponseResult currentUserInfo = cacheUserService.getCurrentUserInfo();
return currentUserInfo;
}
定义一个serviceimpl实现userService接口。
@Service
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class CacheUserServiceImpl implements UserService {
private RedisService redisService;
private UserServiceImpl userService;
@Override
public ResponseResult getCurrentUserInfo() {
Object o = redisService.getRedisTemplate().opsForValue().get("userKey");
// 先查缓存,查不到,在查user数据库接口。
if (o != null){
return ResponseResult.success(o);
}else {
ResponseResult currentUserInfo = userService.getCurrentUserInfo();
return currentUserInfo;
}
}
}
看一下原本的userService的 实现类
@Service
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
@Override
public ResponseResult getCurrentUserInfo() {
return ResponseResult.success("获取当前登录用户信息成功", baseMapper.getById(StpUtil.getLoginIdAsString()));
}
}
这样我们就实现了一个最简单的代理。
我们现在只需要直接调用代理类:CacheUserServiceImpl。就可以实现userService的所有功能。
一般来说我们基于上面的思想,再结合 AOP 机制 和 自定义注解,再完善完善,其实你就实现了大名鼎鼎的springCache功能了。 哈哈哈😀😀😀
转自我的博客:http://he-bi.cn/#/article/214