【发布时间】:2011-07-12 01:41:06
【问题描述】:
我有org.jboss.weld.archetypes:jboss-javaee6-webapp:1.0.1.CR2 的原型,我尝试理解MemberListProducer 的类:
@RequestScoped
public class MemberListProducer
{
@Inject @MemberRepository private EntityManager em;
private List<Member> members;
@Produces @Named public List<Member> getMembers() {return members;}
public void onMemberListChanged(@Observes(notifyObserver = Reception.IF_EXISTS)
final Member member){
retrieveAllMembersOrderedByName();
}
@PostConstruct
public void retrieveAllMembersOrderedByName()
{
//Criteria Query to fetch all members
members = em.createQuery(criteria).getResultList();
}
}
观察者是用memberEventSrc.fire(newMember); 从另一个类调用的,这似乎很清楚:一旦被触发,MemberListProducer 就会更新成员列表。
但我不明白为什么这是在 @RequestScoped Bean 中完成的。据我了解,方法retrieveAllMembersOrderedByName 无论如何都会被每个请求调用。这个@Observes 不应该更好地放在@ViewScoped 或@SessionScoped Bean 中吗?在这种情况下它是否有影响?
【问题讨论】:
标签: java java-ee-6 cdi jboss-weld