Как правильно использовать статический StringWriter в веб-приложении?

У меня есть статическая переменная StringWriter в классе Handler веб-приложения, используемая несколькими частными методами в классе. Каждый метод добавляет String к этой переменной, и, наконец, StringWriter записывает объединенную String в файл. Но во время тестирования веб-приложения я понял, что StringWriter все еще содержит значения всех предыдущих тестов. Я использовал ответ на этот вопрос ( как вы "очищаете" StringWriter в Java?) В качестве обходного пути, но я чувствую, что это не правильно с точки зрения шаблона проектирования и безопасности.

Это правильно? Есть ли способ лучше?

public class BaseHandler {
    private static StringWriter sw = new StringWriter();

    public static void writeToFile(){
        firstMethod();
        secondMethod();
        finalMethod(); 
    }
    private static void firstMethod(){
        sw.append("Pandora's");
    }

    private static void secondMethod(){
        sw.append("Box");
    }

    private static void finalMethod(){
        sw.append("!");
        //sw writes value to file
        ...
        sw.getBuffer().setLength(0);
    }
}

1 ответ

Решение

Я хотел бы спросить себя, нужен ли BaseHandler, который удерживает состояние? Теперь ваш обработчик держит состояние в sw поле, но если вам не нужно это состояние, то вы не создаете поле.

Например, вы можете сделать это:

public class BaseHandler {


    public static void writeToFile(){
        StringWriter sw = new StringWriter();
        firstMethod(sw);
        secondMethod(sw);
        finalMethod(sw); 
    }
    private static void firstMethod(StringWriter sw){
        sw.append("Pandora's");
    }

    private static void secondMethod(StringWriter sw){
        sw.append("Box");
    }

    private static void finalMethod(StringWriter sw){
        sw.append("!");
        //sw writes value to file
        ...
    }
}

При выходе из writeToFile StringWriter помечается для сборки мусора.

Другие вопросы по тегам