0

我有一个 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>

现在我发现了一个问题,如果我clsA在 Spring 配置中声明了 bean,我的 JSF beanclsA与 Spring 配置中的声明同名,将无法工作。这意味着如果我doFuncD()从 JSF 调用,它不会被调用。如果我删除clsASpring 声明,JSF beanclsA工作正常。

有没有更好的方法从 managedBeanClsA构造函数调用 BOC?

4

1 回答 1

0

我在这个问题上的工作是:

  1. 我将删除构造函数代码。不再有构造函数级别的依赖注入。
  2. theBoc.doFuncA();from 构造函数移动到ClsA.
  3. clsA从 Spring 配置文件中删除 Spring bean声明。

这是修改后的代码:

@ManagedBean(name="clsA") 
public class ClsA {

  private BOC boc;

  public clsA(BOC theBoc) {
  }

  public String doFuncD() { return ""; }

  public void setBoc(BOC boc) {
    this.boc = boc;
    theBoc.doFuncA();
  }
}

但是我如何确保 setter 只会被调用一次呢?

于 2012-08-13T01:48:29.053 回答