在 Spring 中为静态常量注入值

Posted

技术标签:

【中文标题】在 Spring 中为静态常量注入值【英文标题】:Injecting values for static constants in Spring 【发布时间】:2011-02-15 08:05:31 【问题描述】:

在我的一个课程中有一个public static String 成员,我需要在applicationContext.xml 中设置这个值!也就是说,我们可以为这个静态属性注入一个值吗?

【问题讨论】:

【参考方案1】:

不,不可能从 XML 上下文向静态字段注入值。

如果你可以修改类,你有以下简单的选择:

移除静态修饰符并在字段上方添加@Inject/@Autowire 添加构造函数/setter/init 方法。

否则,您可以使用 Spring 的 Java 配置支持来实现。

一个例子:

具有静态字段的 Demo 类和断言 Spring 容器将所需值注入静态字段的 JUnit 方法:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("test-context.xml")
public class Demo 

    public static String fieldOne;

    @Test
    public void testStaticField() 
        assertEquals("test", fieldOne);     
    

将上下文命名空间添加到您的 applicationContext 和组件扫描元素:

<context:component-scan base-package="com.example" />

使用静态字段添加您的 bean,如下所示:

@Configuration
public class JavaConfig 

    @Bean
    public Demo demo() 
        Demo.fieldOne = "test";

        return new Demo();
    

在这种情况下,JavaConfig 类必须在组件扫描元素中声明的 com.example 包中。

【讨论】:

【参考方案2】:

是的,这个链接上有一个例子http://planproof-fool.blogspot.com/2010/03/spring-setting-static-fields.html

【讨论】:

以上是关于在 Spring 中为静态常量注入值的主要内容,如果未能解决你的问题,请参考以下文章

spring@value取不到值的几种情况

spring@value取不到值的几种情况

spring 项目中在类中注入静态字段

在启动时访问 EF Core 数据库以设置依赖注入的常量值

如何在 xib 文件中为约束设置常量

Spring 共享全局状态的方式?