【问题标题】:Is @Produces more efficient that a getter in an EL expression@Produces 是否比 EL 表达式中的 getter 更有效
【发布时间】:2012-01-25 10:16:21
【问题描述】:

我想知道这两个代码 sn-ps 中哪个更有效。


第一个

userSearch.xhtml

<rich:dataTable
    var="user"
    value="#{userSearchResultList}"
    rendered="#{not empty userSearchResultList}">
...
</rich:dataTable>

UserSearchAction.java

@Produces @RequestScoped
@Named("userSearchResultList")
public List<User> getResultList() {
    return resultList;
}

第二个

userSearch.xhtml

<rich:dataTable
    var="user"
    value="#{userSearchAction.resultList}"
    rendered="#{not empty userSearchAction.resultList}">
...
</rich:dataTable>

UserSearchAction.java

public List<User> getResultList() {
    return resultList;
}

在这两种解决方案中,我的resultList 变量由UserSearchAction.search() 方法填充。

我正在使用 JBoss 7.0.2.Final 和 RichFaces 4.1.0.Final。

更一般地说,我想知道编写生产者是否比在 JSF 文件中调用某些类的子属性更好。

【问题讨论】:

    标签: jsf richfaces java-ee-6 el cdi


    【解决方案1】:

    这取决于您的制作人如何确定正在制作的内容。如果它是依赖范围的(意味着您没有范围,也没有包含的类),那么它最终是相同的,可能更少取决于您在该方法中必须执行的操作。

    在您的示例中,它应该更有效,因为该生产者方法应该只被调用一次(每个请求)。

    【讨论】:

    • 是的,这或多或少是我的想法……但我想知道 JBoss 中使用的代码是否最终使一种解决方案比另一种更好……但我认为我不能在我对此进行压力测试之前,我才真正知道......无论如何,谢谢。
    • 只被调用一次的好处! JSF 可以多次解析一个属性,在极端情况下,每个请求可以解析数十次。生产者本质上是一种在实例变量中缓存数据的声明性替代方案。使用“更便宜”的范围可能比请求范围更有效。我认为的缺点是可读性。使用第二种方法,可以更清楚地了解数据的来源。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-03
    • 2012-05-19
    • 1970-01-01
    • 2012-02-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多