Инициализировать bean при выходе из указанной c страницы - PullRequest
0 голосов
/ 18 июня 2020

Есть ли способ инициализировать объект, введенный с помощью @Autowired, если он покидает текущую страницу?

Например, если текущий пользователь загружает фотографию во время записи, информация о фотографии сохраняется в хэш-карте в внедренный объект.

В это время, если пользователь загружает изображение и отменяет запись (переход на другую страницу), внедренный объект должен быть инициализирован. В настоящее время, если запись отменяется и текст регистрируется снова, ранее сохраненное изображение остается в объекте.

Вот мой код

Когда пользователь регистрирует изображение, uploadImage получает файл в качестве параметра.

Контроллер. java

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

Передайте файл в tempUpload объекта s3Service и загрузите его в / temp s3 После завершения записи сохраните файл в переменной Map в TempImage, чтобы переместить фотографию в фактическую папку.

Service. 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);
    }

TempImage. 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 должен быть инициализирован.

В настоящее время он продолжает накапливаться.

1 Ответ

1 голос
/ 18 июня 2020

Есть несколько областей видимости компонентов Spring.

singleton

Область действия одного определения bean-компонента до одного экземпляра объекта для каждого контейнера Spring Io C .

прототип

Область определения одного компонента для любого количества экземпляров объекта.

запрос

Включает определение отдельного компонента в жизненный цикл одного HTTP-запроса; то есть каждый HTTP-запрос будет иметь собственный экземпляр bean-компонента, созданный на основе определения одного bean-компонента. Допустимо только в контексте Spring ApplicationContext, поддерживающего веб-интерфейс.

session

Применяет одно определение bean-компонента к жизненному циклу HTTP-сеанса. Допустимо только в контексте Spring ApplicationContext, поддерживающего веб.

глобальный сеанс

Область определения одного компонента для жизненного цикла глобального сеанса HTTP. Обычно действует только при использовании в контексте портлета. Допустимо только в контексте Spring ApplicationContext, поддерживающего веб.

Spring по умолчанию создает beans как singleton.

Однако springboot / spring не может понять, покидает ли пользователь страницу или входит так как они не контролируются. Вы можете создать другую службу, которая очищает все данные в TempImage, вызывая api, когда пользователь покидает страницу.

...