栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何将application.properties中的值分配给静态变量?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何将application.properties中的值分配给静态变量?

你不必

application.properties
在静态字段中保留任何属性。

  • 你不知道何时修改此静态字段
  • 你不知道哪个线程修改了它的价值
  • 任何时候任何线程都可以更改此静态字段的值,并且你被拧紧了
  • 初始化私有静态字段对我来说没有意义

请记住,当你通过

@Service
注释控制bean时,会将其创建委托给Spring容器。Spring通过仅创建一个在整个应用程序中共享的bean来控制此bean的生命周期(当然,你可以更改此行为,但是我在这里指的是默认行为)。在这种情况下,任何静态字段都没有意义-Spring确保只有一个实例
UserService
。你会得到你所描述的错误,因为在Spring容器启动之前,静态字段初始化发生在许多处理器周期中。

建议
做这样的事情会更好:

@Servicepublic class UserService {    private final String svnUrl;    @Autowired    public UserService(@Value("${SVN_URL}") String svnUrl) {        this.svnUrl = svnUrl;    }}

由于以下几个原因,此方法更好:

  • 构造函数注入直接描述了初始化对象所需的值
  • final
    字段表示此值在构造函数调用中初始化后将不会更改(你是线程安全的)

使用 @ConfigurationProperties

还有另一种将多个属性加载到单个类的方法。它要求对要加载到配置类的所有值使用前缀。考虑以下示例:

@ConfigurationProperties(prefix = "test")public class TestProperties {    private String svnUrl;    private int somePort;    // ... getters and setters}

Spring将处理

TestProperties
类初始化(它将创建一个
testPropertiesbean
),并且你可以将该对象注入到其他由Spring容器初始化的bean中。这是示例
application.properties
文件的样子:

test.svnUrl=https://svn.localhost.com/repo/test.somePort=8080

替代解决方案
如果你需要以某种方式在静态上下文中使用值,则最好定义一些带有public static final内部字段的公共类-这些值将在类加载器加载此类时实例化,并且在应用程序生存期内不会被修改。唯一的问题是你将无法从Spring的application.properties文件中加载这些值,你将不得不直接在代码中维护它们(或者你可以实现一些类,以从属性文件中加载这些常量的值,但这听起来如此详细说明你要解决的问题)。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/442015.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号