我有原型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
不应该更好地放在 a@ViewScoped
或@SessionScoped
Bean 中吗?它在这种情况下是否有影响?