有没有办法在没有 xml 或属性文件的情况下将 java 变量/对象存储在应用程序上下文中

Posted

技术标签:

【中文标题】有没有办法在没有 xml 或属性文件的情况下将 java 变量/对象存储在应用程序上下文中【英文标题】:Is there a way to store java variable/object in application context without xml or properties file 【发布时间】:2017-04-23 18:49:14 【问题描述】:

我想在 Spring Boot 应用程序的应用程序上下文中存储一个特定的变量(字符串或对象)。但我不想使用 xml 或属性文件来存储它。

将有一个函数将数据存储在应用程序上下文中。我应该能够检索、修改、删除或添加更多数据。

基本上我想在初始化完成后将数据存储在应用程序上下文中。

【问题讨论】:

您可以获得ApplicationContextregister(Class<?>... annotatedClasses) 所需类的实例,但需要刷新上下文。 我的意思是..,这就是 spring (container) 所做的。 感谢 Andrew,所以您是说使用寄存器我可以将实例化对象添加到 applicationcontext?。有没有说明这一点的例子?这些对象存储的值必须来自java代码或用户,而不是xml或属性文件。 【参考方案1】:

如果您创建一个类并在其上放置@Configuration 注释,并使用@Bean 注释声明一些bean,它们将成为应用程序管理的bean。

@Configuration
public class ConfigurationClass 

    @Bean("myString")
    public String getString()      
        return "Hello World";
    

然后,您可以在代码中的任何位置调用 AnnotationConfigWebApplicationContext.getBean("myString") 来获取您的 bean。

现在可能存在并发问题(如 davidxxx 所述)。为此,您可以使用SimpleThreadScope。查看此link 以了解如何将其注册到应用程序上下文以及该注释的放置位置(或谷歌它)。

或者,如果您不想处理这个问题,那么@Scope("request") 应该会有所帮助。 @Scope("request") 的 bean 将为每个新的传入请求创建,因此它的线程安全得到保证,因为它是在每次新请求进入时创建的。

【讨论】:

【参考方案2】:

一般来说,您应该避免创建有状态服务。 将应用程序数据存储在服务器内存中会使弹性、自主性以及分布式和可扩展性变得更加困难。

此外,Spring Bean 并非设计为有状态的。 如果这样做,您可能会遇到没有所需同步的竞争条件。

关于你的需求,如果你真的想在启动时有一个有状态的服务,创建你自己的单例实例并同步应该是线程安全的方法。 然后从任何地方访问它。

【讨论】:

你好 :) 是的,他们变成了。问题在于并发性:op 想要从中存储/修改/获取数据。 @Faraz Durrani 我们可以相信,但我不认为@Scope(value = "request") 会通过 HTTP 请求创建一个不同的实例。如果你对这件事感兴趣,可以看这里接受的答案:***.com/questions/15745140/…

以上是关于有没有办法在没有 xml 或属性文件的情况下将 java 变量/对象存储在应用程序上下文中的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法在不将完整文件加载到内存的情况下将 tiff 图像转换为 Base64

有没有办法在没有开发人员帐户或通过 Xcode 的情况下将应用程序部署到 iOS 设备?

有没有办法在不离开 App 的情况下将评分发送到 App Store?

有没有办法在没有额外服务器的情况下将 Firebase 与 Stripe 一起使用?

我可以在没有内容长度标头的情况下将文件上传到 S3 吗?

有没有办法在不将 dtype 更改为对象的情况下将 NaT 附加到带有时区的 pandas 日期时间?