2011-07-04 7 views
1

私は達成したいことについて十分に明確になることを望みます。 私は自分自身を正しく説明できない場合、またはナンセンスを話している場合はお詫び申し上げます。可能であれば、Bean構成を使用して別のクラスのメインクラスに関数を追加する

私はJavaでred5アプリケーションを作成しています。それはちょうど私がアプリケーションと呼ばれる私のメインクラスのアプリケーションクラスを指している豆を持っていることを意味します。

私はアプリケーションのようにモジュールを追加したり削除したりするいくつかのクラスがあります。

例:

私は 'A' と 'B' と呼ばれる2つのクラス、それらの一つ一つは(パブリック関数testmeが含まれている)を持っています。 何らかの形で私のメインアプリケーションクラスがこれらの2つのクラスのコンストラクタを呼び出すように設定したいと思います。そして、どういうわけか私のメインアプリケーションクラスには適切なクラスの適切なtestme()関数を呼び出すAtestme()とBtestme() 。手動でこれらの関数を作成し、クラスの1つの中で適切な関数を呼び出すことなく、このようなことを実現する方法はありますか?

このような目標を達成するためにBean構成を使用する方法はありますか? (可能ならば、 は、Beanの設定を可能な限り追加して削除するように設定することができます)

私はリフレクションについて読み始めました。これはパフォーマンスのオーバーヘッドが増え、時間とCPUの生産環境感受性が高い。

welp私は紛失していますので、どんな情報でも大歓迎です。

ありがとうございました!

ありがとうございました!

答えて

1

を持っているときaDoTest()をキャッチするための方法またはbDoTestは(あり)は私のメインクラスで呼び出され、適切な関数を呼び出すためにそれをキャッチする?

これはどう:

public class Application { 
    public static void aDoTest() { 
     doTest(new A()); 
    } 

    public static void bDoTest() { 
     doTest(new B()); 
    } 

    private static doTest(Testable t) { 
     t.testMe(); 
    } 

    public static void main(String[] args) { 
     aDoTest(); 
     bDoTest(); 
    } 
} 

public interface Testable { 
    public void testMe(); 
} 

public class A implements Testable { 
    public void testMe() { 
     // ... 
    } 
} 

この問題が解決しない場合は、あなたの質問を明確にする必要があります。


はおそらく、あなたは存在しない(すなわち、宣言されていないか、未実装)メソッドの呼び出しをキャッチし、実際のメソッドの呼び出しにそれらを回すために欠けています。もしそうなら、そのアイデアをあきらめることができます。 Javaはあなたにそれをさせません。

  • あなたが動的に、ソースコードを生成し、それをコンパイルし、それを読み込むことができます:は、このメソッドの実装と実行時に新しいクラスを生成する

    あなたが来ることができる最も近いです。

  • BCELのようなものを使用して、 ".class"ファイルを作成し、ロードすることができます。
  • Proxyクラスを使用して、一部のインターフェイスの動的プロキシ実装を作成します。

しかし、これらのアプローチはすべて複雑で高価です。 (おそらく、反射を使用した場合よりもはるかに高価になる可能性がありますが、巨額のコールで世代コストを償却できない場合は除きます)。

+0

ありがとう!あなたは私が知る必要があることを明確にしました。私はおそらく、反射と異なる実装を使用するでしょう – ufk

1

Javaの場合、メソッドではなく、関数です。

テスト可能なインターフェイスを作成します。

public interface Testable { 
    public void testme(); 
} 

クラスAとBは、Testableインタフェースを実装する必要があります。

は、その後、あなたのクラスのアプリケーションでは、メソッド

private static doTest(Testable t) { 
    t.testme(); 
} 

を持っていると、あなたは、main()メソッド

public static void main(String[] args) { 
    doTest(new A()); 
    doTest(new B()); 
} 
+0

ありがとうございます。 aDoTest()またはbDoTest()がメインクラスで呼び出され、適切な関数を呼び出すためにキャッチする方法がありますか? – ufk

+0

aDoTest()とは何ですか?私は上記のコードでaDoTestを見ません。あなたは何について話していますか? – ignis

+0

私はdoTest()を書いています。これはあなたの例で書いたものですから。一般的には、これらのクラスの関数をメインクラスに追加する必要があります。誰かが存在しない関数を呼び出して、適切な関数呼び出しを指示した場合、どのようにクラスをキャッチすることができますか? – ufk

関連する問題