2017-05-11 8 views
0

私は基本的にちょうどHashMapを含むクラスを持っています。春のすべてのクラスで利用できるクラスのインスタンスを作成しますか?

クラスには、アプリケーションの他の部分で「キー」を送信してマップから値を返すことができる単純なゲッターメソッドがあります。

しかし、この特定のデータは実際には変更されないため、私はアクセスする必要があるたびにそのクラスをインスタンス化したくないので、マップ内でのみ必要です必要な値をすばやく検索します。

メインアプリケーションクラスでこのインスタンスを作成し、他のすべてのクラスで自動的に使用できるようにしたいと思います。

私は今朝このことについて多くのことを読んできましたが、達成方法について混乱しています。何らかのシングルトンをやろうとしていますか?あるいは、私はサービスを利用しようとしていますか?

とにかく誰かがスニペットを持っていれば、私はそこから学ぶことができます。それは本当に私を助けます。私は現在、春にはほとんどのものにアノテーションを使用しています。

+0

デフォルトでは、Spring Beanはシングルトンです。ちょうどそれを春の豆にして、それを必要な場所に注入してください。 –

答えて

1

Springを引き続き使用する場合は、@Componentを使用して簡単なコンポーネントを作成できます。デフォルトでは、すべてのコンポーネントはシングルトンです。 @PostConstructを使用してデータを初期化することができます。以下は例です。私はStringをマップキーとして使用していますが、アプリケーションに合わせて変更することができます。

@Component 
public class MyMap { 
    private Map<String, Object> theMap = new HashMap<>(); 

    // PostConstruct runs after the application context instantiates the bean 
    @PostConstruct 
    public void init() { 
     // initialize the data in theMap 
    } 

    public Object get(String key) { 
     return theMap.get(key); 
    } 
} 

あなたはその後、Beanを取得するために@Autowired注釈やアプリケーションコンテキストを使用することができます。

public class AnotherClass { 
    @Autowired 
    MyMap myMap; 
    // ... 
} 

あなたが春を避けたい場合は、別のオプションは、単純なJavaシングルトンを作成することです。ここで注意すべき

public class MyMap { 
    private final static Map<String, Object> theMap = new HashMap<>(); 

    // Use a static block to initialize the map with data 
    static { 
     // populate theMap with data 
    } 

    public Object get(String key) { 
     return theMap.get(key); 
    } 
} 

一つのことは、あなたのマップがこれまで実際に更新されますない場合、その後、あなたは同時読み取りおよび更新を処理する必要があるということである例です。

+0

さて、Componentのものがどのようにシングルトンになっているのかは分かりますが、別のクラスのシングルトンにどうやってアクセスすればいいですか?私は何らかのAutowiredアノテーションをやっていますか?どのようにして最初のインスタンスを作るのですか?非常に多くの質問!申し訳ありません:P – IWishIWasABarista

+0

@IWishIWasABaristaはい、 '@ Autowired'アノテーションを使って別のクラスに注入することができます。このインスタンスは、春のアプリケーションコンテキストが別のBeanにインジェクションする必要があるときに初めて作成されます。 –

2

マップを保持するために別のクラスが必要ないとは思いますが必要に応じて地図のBeanを直接作成してから、必要に応じて地図を自動配線します。

@Configuration 
public class MapConfiguration { 
    @Bean 
    public Map<String, Object> dataMap() { 
     // Create and return your Map here 
    } 
} 

マップを希望する場合は、自動配線を使用してください。

@Autowired 
@Qualifier("dataMap") 
private Map<String, Object> dataMap; 
関連する問題