1

データベースから特定の値をロードするたびに、データベースから特定のキーと値を使用して HashMap がロードされます。呼び出されるたびに値を HashMap に繰り返しロードすることなく、この HashMap を他のすべてのクラスで使用できるようにするにはどうすればよいですか。

これは、HashMap がロードされるメソッドを含むクラスです。

public class Codes {
    List<CODES> List = null;
         private CodesDAO codesDAO = new CodesDAO(); //DAO Class

    public HashMap <MultiKey,String> fetchCodes(){

        MultiKey multiKey;
        HashMap <MultiKey,String> map = new HashMap<MultiKey,String>();
        List =  codesDAO.fetchGuiCodes();//fetches codes from DB

        for(CODES gui:List){
             multiKey = new MultiKey(gui.getCode(), gui.getKEY());
             map.put(multiKey,gui.getDESC());
        }
        return map;         
    }
}
4

5 に答える 5

0

OPが彼のJava EEアプリケーションをどのように設計したか、サードパーティのフレームワークが使用されているかどうかはわかりませんが、EJB、CDI、JPA、トランザクション、およびすべてをemで使用する適切に設計された標準のJava EEアプリケーションでは、DBは通常そうではありません静的コンテキストで使用できます。そのような場合、静的に初期化することを提案する答えは、ひどく誤解を招き、壊れています。

標準的なアプローチは、事前に初期化されたデータを保持するインスタンスを1 つだけ作成し、それをアプリケーションの存続期間全体で再利用することです。現在の Java EE 標準では、これは、アプリケーションの起動時に一度 Bean を作成して初期化し、それをアプリケーション スコープに格納することで実現できます。たとえば、アプリケーション スコープの CDI Bean は次のようになります。

@Named
@ApplicationScoped
public class Data {

    private List<Code> codes;

    @EJB
    private DataService service;

    @PostConstruct
    public void init() {
        codes = Collections.unmodifiableList(service.getAllCodes());
    }

    public List<Code> getCodes() {
        return codes;
    }

}

これは#{data.codes}、アプリケーションの他の場所で利用できます。

于 2013-04-02T14:28:53.533 に答える
0

データを一度だけロードできますか? グアバからメモ化を使用します(私はそうします):

  Suppliers.memoize(//Implementation of Supplier<T>)
于 2013-04-02T13:06:22.223 に答える