Как правильно использовать статический 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 помечается для сборки мусора.