从工厂获取不同的对象

时间:2012-02-15 08:25:04

标签: java-ee seam

在我的Bean中,我有以下代码。

我想要什么:当我给工厂打电话给一个新的随机人员时,我想得到每一次。

我得到的结果:我每次都得到相同的人名单。显而易见的原因是,工厂方法只创建一个新对象,如果当前对象为空,即仅在第一次工厂调用时。

我如何更改代码,每次都得到一个新对象?

谢谢!

@Logger                  private Log log;
@In                      private EntityManager entityManager;
@In                      private LocaleSelector localeSelector;

@Factory("personList")
public List<Person> createPersonList() {
    log.info("Creating Person List.");

    return entityManager.createQuery(
    "SELECT p FROM Person p ORDER by random()")
    .setMaxResults(3)
    .getResultList();
}

1 个答案:

答案 0 :(得分:1)

您可以使用METHOD范围:

@Factory(value="personList", scope=ScopeType.METHOD)
public List<Person> createPersonList() {

从技术上讲,METHOD范围仅供内部使用,因此如果每个HTTP请求的新列表都可以接受,我会使用ScopeType.EVENT