0

ストラットについて質問があります。

私はHashMap50近くのエントリを持っているを持っています。次に、このマップをアクションクラス内で定義する必要がありますTestAction。ご存知のように、このアクションクラスはクラスを拡張しActionます。今、私の疑問は根本的なものです。マップを静的としてロードする必要がありますか?このマップを静的にロードする利点は何ですか?このActionクラスを100回呼び出す場合、このマップは1回だけロードされますか?

また、アクションクラスの呼び出しのたびにこのマップにアクセスできるわけではありません。このアクションクラスを100回呼び出すと、このマップにアクセスする必要があるのは40回だけです。

このマップを次のようにロードすると

public Map getMap()
{
 Map testMap= new HashMap();
 testMap.put("Harish",25);
 testMap.put("Ravi",55);
 return testMap();
}

不利な点は何ですか?どちらが最善のアプローチですか?

4

3 に答える 3

2

データが変更されない場合は、静的にロードすることが最善の選択肢のようです。一度だけロードされます。

      private static final Map testMap = new HashMap();
      static {
        testMap.put("Harish",25);
        testMap.put("Ravi",55);
      }

時々変更する必要がある場合は、テストやスレッド化などの他の要因により、他のオプションが望ましい場合があります。

于 2009-09-11T12:26:35.023 に答える
1

現在のコーディング方法-getMap()メソッドが呼び出されるたびにtestMapが再作成されます。「アクションクラスが呼び出された場合」の意味がわかりません-クラスでgetMap()メソッドが呼び出された場合、はい-何らかの方法でgetMap()を呼び出さない他のメソッドが呼び出された場合、その後いいえ。

マップを静的としてロードする必要がありますか?このマップを静的にロードする利点は何ですか?このアクションクラスを100回呼び出す場合、このマップは1回だけロードされますか?

マップ参照を静的にすると、クラスレベルで1回存在します。マップを静的にロードすることもできます。これは1回だけ発生します。これは、実際には、マップの内容を変更しない場合にのみ実行する必要があります。これは、スレッドの問題が発生したり、マップにデータが常に追加されているが削除されていない場合に、マップを空にするタイミングを判断する必要があるためです。 、など。

また、アクションクラスを呼び出すたびにこのマップにアクセスできるわけではありません。このアクションクラスを100回呼び出すと、40回だけこのマップにアクセスする必要がある場合があります。

マップが必要ないことが心配な場合は、遅延読み込みを調べて、マップを静的参照にしますが、マップがまだ作成されているかどうかを確認する静的メソッドを介して常にアクセスすることをお勧めします。起動時ではなく、最初に必要になったときに作成されます。この場合、それはおそらく問題ではありませんが。

このマップをアクションクラス内で定義する必要があります

これは要件というよりも前提条件だと思います-これはWebアプリなので-より良い解決策は、起動時にMapをApplicationスコープに入れることです-静的とほとんど同じですが、クラスに関連付けられていないだけです。

ServletContextListenerを追加して、Webアプリの開始と停止をリッスンし、次を呼び出すことでMaptoApplicationスコープを追加できます。

servletContext.setAttribute("mapKey", testMap)  

次に、アクション(またはWebアプリの他の場所)で電話をかけることができます

servletContent.getAttribute("mapKey")

マップにアクセスできます。

于 2009-09-11T13:35:47.060 に答える
0

マップの内容が静的なままである場合は、静的にします。50エントリは少量のデータであり、クラスのロード時間への影響はごくわずかです。

于 2009-09-11T12:21:41.033 に答える