Можно ли использовать переменные экземпляра в Бине сеанса без состояния?


Я знаю, что безгосударственный Боб не поддерживает разговорное состояние, но мне нужен просто регистратор. Должен ли я получить logger в каждом методе, который вызывается? Если нет, то где я должен инициализировать его?

Это точно, что если я напишу такой код, то не получу NullPointerException в каком-нибудь методе, использующем logger?

 @PostConstruct
 public void init() {
   logger = Logger.getLogger();
 }
3 3

3 ответа:

Я думаю, вы не хотели бы иметь специальный регистратор запросов / сеансов, верно? В этом случае вы можете даже использовать статический член класса для добавления регистратора и позволить всем экземплярам bean использовать один и тот же регистратор.

Создайте синглетный класс, который будет иметь следующие свойства:

  1. статическое поле с типом самого класса
  2. частный конструктор, чтобы гарантировать, что только один экземпляр этого регистратора класс инициируется
  3. getInstance() метод, который даст единственный экземпляр класса
  4. getLogger() метод получения регистратора

Инициализировать регистратор в конструкторе этого класса и
Вы можете получить регистратор из метода getLogger() каждый раз, когда вы нужно использовать его

Попробуйте:

private static final Logger log = Logger.getLogger();

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