DI с CDI и сторонним классом: избегайте, чтобы конструктор делал бизнес-логику, вызываемую несколько раз для каждой прокси

Я относительно новичок в EE / CDI для DI, поэтому, возможно, один из вас мог бы дать мне несколько советов по моей проблеме:

У меня есть сторонний класс, который я хотел бы добавить в другие бины. Весной просто нужно немного <bean> декларация и готово. Используя cdi, теперь он принимает класс фабрики:

public class XProducer {    
    @Produces
    @ApplicationScoped
    public X createX(){
        return new X();
    }
}

К сожалению, конструктор X вызывает довольно дорогую бизнес-логику, и каждый раз, когда cdi создает прокси, он вызывается, но я не могу изменить поведение X. Это оставляет мне следующие опции, которые мне не очень нравятся:

  • завернуть Х в некрасивое Holder-учебный класс,
  • создание некоторого фасада и должны разграничить методы X

Остались ли другие варианты?

1 ответ

Решение

Это, вероятно, тот случай, когда вы хотите использовать @javax.inject.Singleton поскольку он является сторонним разработчиком, вам не потребуется поддержка перехватчиков, а singleton не создает прокси, поэтому конструктор будет вызываться только один раз.

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