汪的爱琪 2024-02-22 14:57 采纳率: 67.5%
浏览 8
已结题

java类的生命周期

我想要实现在service类中,定义一次通过ThreadLocal类封装的token令牌获取的id值变量,以便我在接下来这个类中任何方法里使用它,而无需进行每个方法都使用一次ThreadLocal,但是老是map为null,我想到的是使用静态代码块在类加载时机就定义好这个id,但是爆了map is null,如果要是将静态代码块中的挪到每个类方法中就可以了,但是我觉得那样比较麻烦,篇幅还长,我对类的声明周期或者其他什么都不了解,这个static还是gpt教给我的

package com.codeCart.service.impl;

import com.codeCart.mapper.ArticleMapper;
import com.codeCart.pojo.Article;
import com.codeCart.service.ArticleService;
import com.codeCart.util.ThreadLocalUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Map;

@Service
public class ArticleServiceImpl implements ArticleService {
    private static Integer id;
    static {
        Map<String,Object> map = ThreadLocalUtils.get();
         id = (Integer) map.get("id");
    }
    @Autowired
    private ArticleMapper articleMapper;
    /**
     * @param article 根据参数查询
     * @return
     */
    @Override
    public List<Article> selectArticle(Article article) {
        article.setId(id);
        return articleMapper.selectArticle(article);
    }

    /**
     * @param article
     */
    @Override
    public void addArticle(Article article) {
        article.setId(id);
        articleMapper.addArticle(article);
    }

    /**
     * @param article
     */
    @Override
    public void updateArticle(Article article) {
        article.setId(id);
        articleMapper.updateArticle(article);
    }

    /**
     * @param title
     */
    @Override
    public void deleteArticle(String title) {
        articleMapper.deleteArticle(title);
    }
}


img

img

img

  • 写回答

2条回答 默认 最新

  • shandongwill 大数据领域新星创作者 2024-02-23 09:08
    关注

    代码示例如下

    public class  ContextHolder {
        private static final ThreadLocal<Map<String,String>> tokenHolder = ThreadLocal.withInitial(() -> {
            return new HashMap<>();
        });
        public static void setValue(String token,String value) {
            Map<String,String> dataMap=tokenHolder.get();
            dataMap.put(dsId,value);
    
        }
    
        public static void clear() {
            tokenHolder.remove();
        }
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 3月16日
  • 已采纳回答 3月8日
  • 创建了问题 2月22日

悬赏问题

  • ¥15 有人会用py或者r画这种图吗
  • ¥15 MOD04_3K图像预处理
  • ¥15 [VASP]关于超胞大小和k 点网格的收敛性测试
  • ¥15 pip下载paddle2onnx离谱错误
  • ¥60 db2move nlzxams import 导出db2备份数据报错
  • ¥15 关于#python#的问题:全文总结功能咨询
  • ¥15 俄罗斯方块中无法同时消除多个满行
  • ¥15 使用gojs3.0,如何在nodeDataArray设置好text的位置,再go.TextBlock alignment中进行相应的改变
  • ¥15 psfusion图像融合指标很低
  • ¥15 银河麒麟linux系统如何修改/etc/hosts权限为777