2017-05-11 19 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; 
相关问题