Является ли хорошей практикой присваивать NULL ссылку на компонент Java CDI / EJB, если вы покончили с этим?

1

Это имеет смысл - показать контейнер JVM/CDI, который я хочу выпустить SomeOtherBean?

@Singleton
public class SingleBean {

   @Inject
   SomeOtherBean someBean;

   private Map values;

   @PostSonstruct
   private void postConstruct() {
      someBean.doThis();
      someBean.doThat();
      values = someBean.retrieveValues();
      //...
      someBean = null; //don't need this anymore.
    }

   public Object getValue(String key) {
      return values.get(key);
   }
}
Теги:
garbage-collection
reference
cdi
ejb

3 ответа

3
Лучший ответ

Почему бы вам просто не использовать @Inject для конструктора SingleBean и не хранить значение someotherbean в поле, если вам это больше не нужно.

  • 0
    Хорошая точка зрения. Отвечает на мой вопрос отлично.
2

Это присвоение null не требуется, так как экземпляр SomeOtherBean все равно будет ссылаться на структуру DI. Кроме того, он знал, что сборщик мусора освобождает память недетерминированно.

Как и другие, вам лучше вставить компонент в конструктор и заполнить карту там вместо того, чтобы делать это в методе @PostConstruct.

EDIT (согласно комментарию @JanGalinski):

Что касается части "хорошей практики", я не считаю хорошей практикой оставлять null ссылку в поле. Что, если кто-то позже расширяет класс SingleBean и ожидает, что это поле будет иметь SomeOtherBean ссылку на SomeOtherBean? У вас может быть NPE...

  • 0
    Ну, это действительно имеет эффект: инъекция поля определяет API: «Если вы создаете экземпляр, вам понадобится SomeOtherbean». Если бы моей задачей было расширить этот Бин, я бы принял ненулевое значение и потерпел бы неудачу с NPE ... так что эффект - ненужная путаница.
2

Система CDI почти наверняка будет иметь компонент в своем реестре, поэтому вы не будете выпускать какую-либо память. Однако лучше использовать инжектор конструктора вместо @PostConstruct всякий раз, когда это целесообразно, поскольку его проще и легче тестировать.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню