我在 Vaadin 上下文中使用 CDI,但这对我的问题无关紧要:通常是在构造函数中注入对象还是直接作为成员变量更好?特别是如果必须进一步配置这些对象以使组件工作。
下面显示了两种不同的 CDI 可能性:
@UIScoped
public class MyMenuBar extends CustomComponent {
    @Inject @New private Label label;
    @Inject @New private MenuBar menuBar;
    @PostConstruct
    private void init() {
        //set label text, define menu entries
        setCompositionRoot(menuBar);
    }
}
@UIScoped
public class MyMenuBar extends CustomComponent {
    private Label label;
    private MenuBar menuBar;
    @Inject
    public MyMenuBar(@New Label label, @New MenuBar menuBar) {
        //set label text, define menu entries
        setCompositionRoot(menuBar);
    }
}
有最佳实践吗?为什么一个人更喜欢一种选择而不是另一种?还是只是个人选择的问题?