离开特定页面时初始化 bean



有没有办法初始化注入@Autowired的对象,如果它离开当前页面?

例如,如果当前用户在写入时上传照片,则照片信息将存储在注入对象的哈希图中。

此时,如果用户上传图片并取消写入(移动到另一页(,则必须初始化注入的对象。目前,如果取消写入并再次注册文本,则先前存储的图像将保留在对象中。

这是我的代码

当用户注册图片时,上传图像将文件作为参数接收。

控制器.java

@PostMapping("/image")
public void uploadImage(@RequestPart MultipartFile upload) {
s3Service.tempUpload(upload);
}

将文件传输到 s3Service 对象的临时上传,并将其上传到 s3 的/temp 写入完成后,将文件保存在 TempImage 的 Map 变量中,将照片移动到实际文件夹。

服务.java

private TempImage tempImage;
@Autowired
public S3Service(TempImage tempImage) {
this.tempImage = tempImage;
}
public String tempUpload(MultipartFile file) {
s3Client.putObject(
new PutObjectRequest(bucket + "/temp", fileName)
);
tempImage.setTempFile(fileName, bytes);
}

临时图像.java

@Component
public class TempImage {
private final HashMap<String, byte[]> tempFile = new HashMap<>();
public HashMap<String, byte[]> getTempFile() {
return tempFile;
}
public void setTempFile(String fileName, byte[] bytes) {
this.tempFile.put(fileName, bytes);
}
public void clearTempFile() {
this.tempFile.clear();
}
}

此时,如果用户返回或离开页面,则应初始化 TempImage 对象。

目前,它继续积累。

有几个春豆范围。

单身 人士

将单个 Bean 定义的范围限定为每个 Spring 的单个对象实例 国际奥克容器。

原型

将单个 Bean 定义的作用域限定为任意数量的对象实例。

请求

将单个 Bean 定义的范围限定为单个 HTTP 的生命周期 请求;也就是说,每个HTTP请求都有自己的 在单个 Bean 定义背面创建的 Bean 实例。 仅在 Web 感知的 Spring 应用程序上下文中有效。

会期

将单个 Bean 定义的范围限定为 HTTP 会话的生命周期。 仅在 Web 感知的 Spring 应用程序上下文中有效。

全球会议

将单个 Bean 定义的范围限定为全局 HTTP 的生命周期 会期。通常仅在 Portlet 上下文中使用时才有效。只 在 Web 感知的 Spring 应用程序上下文的上下文中有效。

默认情况下,Spring 将豆子创建为单例。

但是,springboot/spring无法理解用户是否离开或进入页面,因为它不受他们的控制。您可以创建另一个服务,通过在用户离开页面时调用 api 来清除 TempImage 中的所有数据。

最新更新