Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 生产者方法与命名类_Java_Jsf_Cdi - Fatal编程技术网

Java 生产者方法与命名类

Java 生产者方法与命名类,java,jsf,cdi,Java,Jsf,Cdi,我想知道首选哪种方式:通过完整的classname.property访问支持bean变量,还是通过producer方法直接访问属性名称?特别是如果项目规模越来越大,有很多课程、服务、门面等 @Named public Service { List<Customer> getCustomers(); } use: <h:dataTable value="#{service.customers}" /> @Named 公共服务{ 列出getCustomers();

我想知道首选哪种方式:通过完整的classname.property访问支持bean变量,还是通过producer方法直接访问属性名称?特别是如果项目规模越来越大,有很多课程、服务、门面等

@Named
public Service {
    List<Customer> getCustomers();
}

use:
<h:dataTable value="#{service.customers}" />
@Named
公共服务{
列出getCustomers();
}
使用:

公共服务{
@产生
@命名
列出getCustomers();
}
使用:
对我来说,第一个好处是,如果我必须更改jsf,我总是确切地知道由于完整的限定名,我必须修改哪个类

这对于第二种方式来说是不利的,但相比之下,在许多服务和类的情况下,这种方式更易于阅读


专家们会怎么说呢?

在我看来,我选择第一条路线。重构也更容易(假设您的IDE也将在JSF页面中重命名)。虽然,老实说,我希望这是一个个人口味的事情


使用service.property的另一个优点是能够修改属性并将其反映在UI上。如果您使用的是生产者,则每个作用域只调用该生产者一次,而始终调用获取者(另一种性能权衡)。做事情有很多种方法,不管对什么有用,都要用这种方法。

我会选择第一种方法,因为我喜欢总是引用与页面相关的托管Bean。我相信这是一个更容易理解的代码

public Service {
    @Produces
    @Named
    List<Customer> getCustomers();
}

use:
<h:dataTable value="#{customers}" />