JSFbean——找出哪个bean触发了当前bean的初始化

JSFbean——找出哪个bean触发了当前bean的初始化,jsf,jsf-2,Jsf,Jsf 2,假设我有一个带有@PostConstruct方法的JSFbean。 我想知道哪个实体引用了当前bean并导致其初始化 @PostConstruct public void init() { logger.info(... Who initialized me? ...); } 此信息在JSF上下文中不可用。如果您使用的是Mojarra,则需要运行调试器并在ManagedBeanBuilder#bake()方法上设置断点 public void setParent(Object parent

假设我有一个带有
@PostConstruct
方法的JSFbean。 我想知道哪个实体引用了当前bean并导致其初始化

@PostConstruct
public void init() {
  logger.info(... Who initialized me? ...);
}

此信息在JSF上下文中不可用。如果您使用的是Mojarra,则需要运行调试器并在
ManagedBeanBuilder#bake()
方法上设置断点

public void setParent(Object parent) {
    logger.info(parent + " has initialized me");
}
或者,如果您在运行时出于某种不明显的原因需要这些信息,那么您需要让调用方在引用bean的
@ManagedProperty
的setter中设置自己

@ManagedBean
@RequestScoped
public class Parent {

    @ManagedProperty("#{child}")
    private Child child;

    public void setChild(Child child) {
        this.child = child;
        this.child.setParent(this);
    }

    // ...
}
然后可以在
setParent()
方法中收集这些信息

public void setParent(Object parent) {
    logger.info(parent + " has initialized me");
}

此信息在JSF上下文中不可用。如果您使用的是Mojarra,则需要运行调试器并在
ManagedBeanBuilder#bake()
方法上设置断点

public void setParent(Object parent) {
    logger.info(parent + " has initialized me");
}
或者,如果您在运行时出于某种不明显的原因需要这些信息,那么您需要让调用方在引用bean的
@ManagedProperty
的setter中设置自己

@ManagedBean
@RequestScoped
public class Parent {

    @ManagedProperty("#{child}")
    private Child child;

    public void setChild(Child child) {
        this.child = child;
        this.child.setParent(this);
    }

    // ...
}
然后可以在
setParent()
方法中收集这些信息

public void setParent(Object parent) {
    logger.info(parent + " has initialized me");
}