2

私にはアクションクラスがあり、そのクラスにはSpringDependencyInjectionで満たされるBOCオブジェクトがあります。以下にサンプルコードを示します。

public class ActionCls {
  private BOC theBoc = null;

  /*** theBoc getter / setter ***/
}

たとえば、コンストラクター内にthefunc属するメンバー関数を呼び出したい場合は、次のようにします。BOCActionCls

public class ActionCls {
   private BOC theBoc = null;

   ActionCls() {
      theBoc.thefunc();
   }
}

theBocnullを示すランタイムエラーがスローされます。私はinit-methodこのような春の構成で使用しようとしました:

<bean id="theBoc" class="com.huahsin68.BOC" init-method="thefunc"></bean>

thefuncとにかく、これは最初に呼び出されても役に立ちませんが、theBocセッターはActionClsコンストラクターの後でのみ呼び出されます。theBocそれは、セッターを最初に呼び出し、次にActionClsコンストラクターのみを呼び出す方法ですか?したがって、これtheBocはnullではなく、を呼び出すことができますthefunc

4

3 に答える 3

6

コンストラクターが呼び出される前に、クラスでゲッターまたはセッターを呼び出すことは期待できません。あなたが達成したいことは不可能です。constuctor-argActionCls Bean の param を使用して、何らかの引数で theBoc を初期化し、メソッドを呼び出す、パラメーター化されたコンストラクターをより適切に作成できます。

public class ActionCls {
   private BOC theBoc = null;

   ActionCls(BOC theBoc) {
      this.theBoc = theBoc
      theBoc.thefunc();
   }
}

次に、コンストラクタ引数を次のように定義できます。

<bean id="actionCls" class="foo.bar.ActionCls">
        <constructor-arg ref="boc"/>
</bean>
于 2012-08-10T08:46:21.400 に答える
2

あなたが求めていることを行うことはできませんが(プロパティがミューテーターを介して設定されている間に、コンストラクターのプロパティで@PostConstructメソッドを呼び出す)、Spring を使用して Bean でメソッドを呼び出すことができます。適切に組み立てられました。

class ActionCls {
  @Inject
  private BOC boc;

  @PostConstruct
  public void postConstruct() {
    boc.func();
  }
}

http://docs.oracle.com/javaee/5/api/javax/annotation/PostConstruct.htmlを参照してください。

于 2012-08-10T09:18:21.310 に答える
1

baba の回答に加えて、init-method(または@PostConstruct) を使用してこの問題を解決できますが、 onActionClsではなくon で使用する必要がありBOCます。

public class ActionCls {
    ...
    public void init() {
       theBoc.thefunc();
    }
}

.

<bean ... class="com.huahsin68.ActionCls" init-method="init">...</bean>

init メソッドは、Bean が完全に初期化されたときに実行されることが保証されているため、依存関係に使用する注入のタイプ (セッターまたはコンストラクター) に依存しないため、このアプローチはよりエレガントだと思います。

于 2012-08-10T09:07:27.817 に答える