【发布时间】:2012-08-08 23:17:42
【问题描述】:
我有一个 ManagedBean 说 clsA,在这个 clsA 里面有一个 BOC 对象,它将用 DI 填充。如果我想在 clsA 构造过程中调用 BOC,我将在 clsA 构造函数中进行。代码将如下所示:
@ManagedBean(name="clsA")
public class ClsA {
private BOC boc;
public clsA(BOC theBoc) {
theBoc.doFuncA();
}
public String doFuncD() { return ""; }
}
Spring 配置会这样:
<bean id="theBoc" class="com.foo.BOC"/>
<bean id="clsA" class="com.foo.clsA">
<constructor-arg value="theBoc"/>
</bean>
现在我发现了一个问题,如果我在 Spring 配置中声明了 clsA bean,那么我的 JSF bean clsA(与 Spring 配置中的声明同名)将无法工作。这意味着如果我从 JSF 调用 doFuncD(),它不会被调用。如果我删除 clsA Spring 声明,JSF bean clsA 工作正常。
有没有更好的方法从 managedBean ClsA 构造函数调用 BOC?
【问题讨论】:
-
看起来您正在混合 JSF 和 Spring 的职责。我不做 Spring,我不知道你为什么使用 Spring 那样通过抑制默认构造函数来完全杀死 JSF bean 管理工具,所以我无法回答那部分,但你应该能够使用
@PostConstruct注解在构造和依赖注入之后直接执行逻辑。另请参阅stackoverflow.com/questions/10196982/… -
我同意你的看法,这是我的代码设计问题。我真的需要重新考虑一下。
标签: spring jsf-2 dependency-injection managed-bean