@Override
 public void setAttribute(AttributeConfigDO ac, Object value) {
   String key = ac.getKey();
   // XXX 注意,这里调用了value上的toString(),而不是保存value对象本身
   String v = value == null ? null : value.toString();
   AttributeDO attribute = new AttributeDO(ac, v);
   attributes.put(key, attribute);
   dirty.add(key); // 标记修改
 }
  @Override
  public Object getAttribute(AttributeConfigDO ac) {
    String key = ac.getKey();

    // 先从已解析中获取
    AttributeDO attribute = attributes.get(key);
    if (attribute == null) {
      attribute = getAttributeFromCookies(ac);

      // 保存到已解析map
      attributes.put(key, attribute);
    }

    return attribute.getValue();
  }