我不知道这是否是实现我的解决方案的更好方法:

@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;
}


希望这可以帮助!

10-07 20:55