2017-05-11 21 views
0

我有一個基本上只包含一個HashMap的類。在春天爲所有類提供類的實例嗎?

該類還有一個簡單的getter方法,它允許我的應用程序的其他部分發送「key」並從地圖中取回值。

不過,我不想在每次需要訪問它時每次都要實例化這個類,因爲這些特定的數據並沒有真正改變,我只是爲了快速查詢我需要的價值。

我想讓我的主應用程序類創建一個這樣的實例,然後讓它可以自動地用於所有其他類。

我今天早上一直在閱讀關於這個問題的很多內容,但是對於如何實現這個問題感到困惑,我想要做一些單例嗎?或者我正在嘗試使用服務?

無論如何,如果任何人有一個片段,我可以學習 - 這真的會幫助我。我目前在春天使用Annotations來處理大多數東西,並且會喜歡用這種方式保留它。

+0

默認情況下,Spring bean是單身人士。只需將它製作成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); 
    } 
} 

然後,您可以使用@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

好吧,我想我得到組件的東西如何使它成爲一個單身 - 但是,我如何訪問不同類中的單身人士?我是否會做某種Autowired註釋?我如何做第一個例子?這麼多的問題!對不起:P – IWishIWasABarista

+0

@IWishIWasABarista是的,您可以使用'@ Autowired'註釋將其注入到另一個類中。該實例將在Spring應用程序上下文第一次將其注入另一個bean時創建。 –

2

我想你甚至可能不需要一個單獨的類來保存你的地圖。直接創建一個您可能需要的Map的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; 
相關問題