gpt4 book ai didi

jsf-2 - JSF - @PostConstruct 和构造函数的直接方法调用有什么区别?

转载 作者:行者123 更新时间:2023-12-03 15:16:14 24 4
gpt4 key购买 nike

在我看来,作用域为 managedBean,我需要用数据库中的数据填充一个列表。
我通过构造函数的直接调用来做到这一点,如下所示:

public MyClass(){
list=populateFromDb();
}

但是可以在 @PostConstruct 注释的方法中调用此方法,例如:
public MyClass(){
}

@PostConstruct
populateFromDb(){...}

这有什么区别?

最佳答案

如果 bean 有请求范围,@PostConstruct 每次都会被执行。它将在托管 bean 被实例化之后,但在 bean 被放入作用域之前被调用。这样的方法不带参数,返回 void,并且可能不会声明要抛出的已检查异常。方法可以是公共(public)的、 protected 、私有(private)的或包私有(private)的。如果该方法抛出未经检查的异常,则 JSF 实现不得将托管 bean 投入服务,并且不会调用该托管 bean 实例上的其他方法。

public TrainingClassForm() {

}
@PostConstruct
public void init() {
if (this.trainingListModel.getListDataModel() != null) {
this.trainingListModel.getAllTrainingClasses();
}

}

推荐您到 this question of stack在托管 bean 中, @PostConstruct在常规 Java 对象构造函数之后调用。当构造函数被调用时,bean 尚未初始化 - 即没有注入(inject)依赖项。 @PostConstruct方法 bean 已完全初始化,您可以使用依赖项 @PostConstruct是保证调用此方法的合约 在 bean 生命周期中只有一次 .容器在其内部工作中多次实例化 bean 可能会发生(尽管不太可能),但它保证 @PostConstruct只会被调用一次。
如果您的类在构造函数中执行所有初始化,那么 @PostConstruct确实是多余的。

但是,如果您的类使用 setter 方法注入(inject)了其依赖项,则该类的构造函数无法完全初始化对象,并且有时需要在调用所有 setter 方法后执行一些初始化,因此 @PostConstruct 的用例还有 see thisthis

关于jsf-2 - JSF - @PostConstruct 和构造函数的直接方法调用有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16542003/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com