无感五 2019-05-08 10:00 采纳率: 50%
浏览 389
已采纳

单例类里面用id做key和我现在这种写法有什么区别呢

我现在实现得方法

//返回map数据
    public  Map<String, Object> getAuthentication() {
        //获取token
        HttpServletRequest request=((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
        String token =  request.getHeader( "token" );
        //根据token解析jwt
        String   Id = JWT.decode(token).getAudience().get(0);
        Long userId = Long.valueOf( Id );//获取用户id
        //根据返回得用户id查询该用户得详细
        user.setId(userId);//传输用户id
        User userList = userMapper.selectOne(user);//根据传输得用户id查询用户数据
        String unionId =  userList.getUnionId();//获取用户的微信unionId
        String openid =  userList.getOpenid();//获取用户的微信Openid
        Map<String , Object> map = new HashMap<>(  );
        map.put( "userId", userId);//返回用户敏感数据
        map.put( "unionId", unionId);//返回用户敏感数据
        map.put( "openid", openid);//返回用户敏感数据
        return map;
    }

但是,有大佬说我这种方法不好每次都要查询数据库,以下是大佬得截图
图片说明

请问,大佬说得方法是怎么样得,有类似得文档吗或者我应该怎么修改这个方法呢

  • 写回答

5条回答 默认 最新

  • chinarealone 2019-05-08 10:37
    关注

    就事论事,单例(singleton)模式是合理的,内存消耗少(空间优势),响应时间快(时间优势)。
    内存消耗少:因为有一个全局的,静态的map,不需要每次登录在内存创建临时map对象并返回,减少内存申请和回收的消耗。
    响应时间快:一旦ID在全局静态map中存在,意味着不需要查询数据库,直接更加根据ID取出结构体的value(即user类的对象)即可。
    以下为示意代码,不全,能看懂就行。

    static map userlist;//全局map, key为用户ID,value为用户信息的类对象

    public User getAuthentication() {
    //获取token
    HttpServletRequest request=((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
    String token = request.getHeader( "token" );
    //根据token解析jwt
    User user;
    String Id = JWT.decode(token).getAudience().get(0);
    if (userlist.containsKey(id))
    {
    user =userlist.get(id);

        }
       else
       {
    
        Long userId = Long.valueOf( Id );//获取用户id
        //根据返回得用户id查询该用户得详细信息,并赋值给user
        userlist.put( id, user);
      }
      return user;
    
    
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

悬赏问题

  • ¥15 matlab中使用gurobi时报错
  • ¥15 WPF 大屏看板表格背景图片设置
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂