0

clsA という ManagedBean があります。この clsA には、DI で満たされる BOC オブジェクトがあります。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 構成内で Bean を宣言すると、Spring 構成内で宣言されたものと同じ名前clsAの JSF Beanが機能しないという問題が見つかりました。JSF からclsA呼び出すと、get 呼び出しではないことを意味します。Spring 宣言doFuncD()を削除すると、JSF Beanは正常に動作します。clsAclsA

managedBeanClsAコンストラクターから BOC を呼び出すより良い方法はありますか?

4

1 に答える 1

0

この質問に対する私の回避策は次のとおりです。

  1. コンストラクターコードを削除します。コンストラクターレベルの依存性注入はもうありません。
  2. theBoc.doFuncA();fromコンストラクターをのsetterに移動しClsAます。
  3. clsASpring構成ファイルからSpringBean、、宣言を削除します。

改訂されたコードは次のとおりです。

@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();
  }
}

しかし、セッターが1回だけ呼び出されるようにするにはどうすればよいですか?

于 2012-08-13T01:48:29.053 に答える