在SpringMVC的service实现类即serviceImpl里如何声明全局变量?

@Service("XXXService")
public class GoodsServiceImpl implements GoodsService {
//商品展示图片路径
private List goodsPicturePath;

    @Resource
    //商品Dao接口
private GoodsDao goodsDao;

    @Override
public void uploadImg(HttpServletRequest request) {

          ```

          ```
   //获取前台传过来的图片,代码略(此处没问题)

   //随机生成图片名称
    String imgName = UUID.randomUUID().toString() + ".jpeg";
   //使用IO流,给文件命名,指定存放目标文件地址
    String destPath = localPath + systemSeparator + imgName;

   //*********此处会报空指针异常*********
   //想把每一次生成的图片路径放到goodsPicturePath集合里保存,最后插到数据库中,一致没有找到什么好的解决方法
   this.goodsPicturePath.add(destPath + ";");
  }

}

5个回答

尝试是用静态变量声明一个集合。

在使用前,赋值一个集合

    @Override
public void uploadImg(HttpServletRequest request) {

          ```

          ```
   //获取前台传过来的图片,代码略(此处没问题)

   //随机生成图片名称
    String imgName = UUID.randomUUID().toString() + ".jpeg";
   //使用IO流,给文件命名,指定存放目标文件地址
    String destPath = localPath + systemSeparator + imgName;

   this.goodsPicturePath = new ArrayList();
   this.goodsPicturePath.add(destPath + ";");
  }

你可以试试这样,用bean创建对象:

@Bean
private List goodsPicturePath(){
        return new ArrayList<>();
}

你需要了解一下静态变量和单例模式。项目中有工具类吧?有的话在工具类中创建一个静态单例的List goodsPicturePath 对象。用的时候直接Utils.getGoodsPicturePath();返回这个集合。这个集合相对于项目就是全局唯一的。不过集群和分布式项目不适用(可以用redis中的队列代替)

private List goodsPicturePath(){
return new ArrayList<>();
}
每次调用这个方法就行了。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问