Как отказаться от одноразовых бинов @Injected? - PullRequest
0 голосов
/ 23 января 2019

My ExampleBean нужна информация из UsefulBean1 только во время создания. Поэтому я могу отказаться от экземпляра UsefulBean1 после получения необходимой информации.

@ManagedBean
public class ExampleBean {

   private int value;

   @Inject
   public void setUseful(UsefulBean usefulBean){
        this.value = usefulBean.getValue();
        //bye, bye usefulBean. see ya.
   }
}

Но как насчет моего ExampleBean2, которому во время создания требуется объединенная информация из UsefulBean1 и UsefulBean2?

Я знаю, что могу получить их @Injected и объединить информацию по @PostConstruct методу:

@ManagedBean
public class ExampleBean2 {

   private int value;

   @Inject 
   private UsefulBean1 usefulBean1;

   @Inject 
   private UsefulBean2 usefulBean2;

   @PostConstruct
   public void init(){
        this.value = this.usefulBean1.getValue() + this.usefulBean2.getValue();
        //from this point on, the usefulBeans fields are useless...
        this.usefulBean1 = null;
        this.usefulBean2 = null;

   }
}

Но меня немного раздражает, что я оставляю эти два ненужных поля (this.usefulBean1 и this.usefulBean2).

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

Это, безусловно, ничего не нарушает или тратить ресурсы. Но код, IMHO, был бы более понятным без полей, работающих как временные одноразовые переменные.

Есть ли возможность инициализировать bean-компонент CDI данными из нескольких других bean-компонентов без необходимости задавать их как поля?

...