好想住在海边 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日