有没有办法在没有 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 或属性文件来存储它。
将有一个函数将数据存储在应用程序上下文中。我应该能够检索、修改、删除或添加更多数据。
基本上我想在初始化完成后将数据存储在应用程序上下文中。
【问题讨论】:
您可以获得ApplicationContext
和register(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?