当前位置: 首页 > article >正文

代理模式简单举例

介绍一下,代理模式。
其实代理模式是我们最常用的,在任何框架中几乎都离不开代理模式的应用。
话不多说,直接上一个代码理解一下。

定义一个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


http://www.kler.cn/a/375106.html

相关文章:

  • Android里的协程( Coroutine)理解
  • 数据库管理系统的ACID都各自是什么?
  • RabbitMQ + JMeter组合,优化你的中间件处理方式!
  • 在pycharm中使用sqllite
  • 3000字帮你彻底搞懂Java抽象类与接口的区别(含JDK8接口新增三种方法与丰富案例)
  • 广东网站设计提升你网站在搜索引擎中的排名
  • Spring Boot框架下校园社团信息管理的优化策略
  • 独立北斗定位智能安全帽、定位安全帽、单北斗执法记录仪
  • 使用 Qt GRPC 构建高效的 Trojan-Go 客户端:详细指南
  • 抽丝剥茧 分布式服务框架设计 实战落地篇
  • Spring AOP(定义、使用场景、用法、3种事务、事务失效场景及解决办法、面试题)
  • Spring beanFactoryPostProcessor
  • Redis 线程控制 问题
  • 在linux中是如何运行一个应用程序的?
  • (七)JavaWeb后端开发1——Maven
  • 大语言模型驱动的跨域属性级情感分析——论文阅读笔记
  • 创造tips的秘籍——PHP回调后门
  • Redis 实战 问题
  • 【Sublime Text】格式化Json和XML
  • 线代的几何意义(一)——向量,坐标,矩阵
  • thinkphp和vue基于Workerman搭建Websocket服务实现用户实时聊天,完整前后端源码demo及数据表sql
  • Docker部署jenkins容器时,允许jenkins容器内部控制宿主机上的docker
  • 正向解析,反向解析
  • CSS3新增长度单位(二)
  • 从比亚迪超越特斯拉,看颠覆全球市场的中国力量
  • 大语言模型微调方法详解【全量微调、PEFT、LoRA、Adapter】