我不知道这是否是实现我的解决方案的更好方法:
@Component
@Scope("singleton")
public class GetFromJson implements Serializable{
/**
*
*/
private static final long serialVersionUID = -8203722696439228358L;
Map<String, Map<String, ArrayList<String>>> jsonMap;
public Map<String, Map<String, ArrayList<String>>> getJsonMap() {
return jsonMap;
}
public void setJsonMap(Map<String, Map<String, ArrayList<String>>> jsonMap) {
this.jsonMap= jsonMap;
}
}
该类是可序列化的,因为我从数据库的Json获取内容,并将内容映射到对象GetFromJson中(我只需要在数据库中进行一次查询)。因此,我需要在所有APp中使用对象,因此,我认为我需要使用Singleton
有人向我发布了一个从数据库获取JSON的库。由于这个原因,JSON对象解析为
Map<String, Map<String, ArrayList<String>>>
,所以我创建了GetFromJson
类。现在我有很多rest服务,在我的rest服务中,我需要使用我的对象:GetFromJson以获取jsonMap的内容。
我有很多问题。
使用注释
@Scope("singleton")
,我保证在我的所有应用程序中只有GetFromJson
个实例可用吗?或者在Spring中在我的应用程序中提供单例和会话对象的更好方法是什么?
要获取GetFromJson的jsonMap的内容就足够了
@Autowired
private GetFromJson jsonObject;
或如何获得单身人士课程?
在我的其余方法服务中,使用:
jsonObject.getJsonMap();
如何初始化我的单身人士,因为我正在尝试使用以下方法初始化我的对象:
@Autowired
private GetFromJson jsonObject;
public methodToInitialize(){
jsonObject = methodLibraryFromDatabase(GetFromJson.class);
}
并且IDE告诉我不使用字段初始化
我需要相同的逻辑,但对于会话对象,我认为如果我理解会话对象的单例实现将是相同的,只是将注释更改为:
@Scope("session")
最佳答案
我认为OP希望在应用程序生命周期中一次初始化基于数据库的POJO并在需要的地方对其进行自动装配。
通常,这是通过创建一个bean(除非另有说明,为单例)并在需要的地方自动装配完成的。
该示例应该可以帮助您入门。
@Configuration // beans are declerated in @Configuration classes
public class GetJsonInitializer {
@Bean // singleton by default
public GetFromJson jsonMap(){
GetFromJson jsonObject = methodLibraryDatabase(GetFromJson.class);
return jsonOBject;
}
}
现在在任何Spring服务/组件等中自动连接
GetFromJson
。@Service
public class SomeService {
@Autowired
private GetFromJson jsonMap;
}
希望这可以帮助!