Инъекционные значения для статических констант в Spring

В одном из моих классов есть член public static String, и мне нужно установить это значение в applicationContext.xml! То есть, возможно ли нам ввести значение для этого статического свойства?

Ответы

Ответ 2

Нет, невозможно вставить значение в статическое поле из вашего XML-контекста.

Если вы можете изменить класс, у вас есть следующие простые варианты:

  • удалите статический модификатор и добавьте @Inject/@Autowire над полем
  • добавить метод конструктора/сеттера/init.

В противном случае вы можете сделать это с помощью поддержки конфигурации Java Spring.

Пример:

Класс Demo со статическим полем и методом JUnit, который утверждает, что контейнер Spring вставляет требуемое значение в статическое поле:

@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, как это указано в элементе проверки компонента.