Внедрение значений для статических констант в Spring - PullRequest
14 голосов
/ 04 мая 2010

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

Ответы [ 2 ]

11 голосов
/ 04 мая 2010

да, по этой ссылке есть пример http://planproof -fool.blogspot.com / 2010/03 / spring-setting-static-fields.html

4 голосов
/ 04 мая 2010

Нет, невозможно вставить значение в статическое поле из контекста 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 и элемент component-scan:

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

Добавьте ваш бин со статическим полем, например:

@Configuration
public class JavaConfig {

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

        return new Demo();
    }
}

В этом случае класс JavaConfig должен находиться в пакете com.example, как объявлено в элементе component-scan.

...