Spring: конструктор для внедрения примитивных значений (свойств) с конфигурацией на основе аннотаций - PullRequest
8 голосов
/ 21 февраля 2010

Я пытаюсь настроить класс с помощью конфигурации на основе аннотаций в Spring 3, которая принимает примитивные значения в качестве аргументов конструктора:

@Component
class MyBean {
  MyBean(String arg1, String arg2) {
    // ...
  }
}

И контекст приложения такой:

<beans [...]>
  <context:component-scan base-package="com.example" />
  <context:property-override location="/WEB-INF/example.properties" />
</beans>

Я пытаюсь найти способ указать, что аргументы конструктора должны быть взяты из файла свойств. Очевидно, это работает с конструкторами, которые принимают обычные bean-компоненты (например, MyClass(Bean bean1, OtherBean bean2)), но только свойства?

Я также пытался аннотировать аргументы конструктора с помощью аннотации @Value Spring 3 и выражения EL для значения, такого как @Value("#{prop.Prop1}") arg1, но, похоже, это тоже не работает.

1 Ответ

16 голосов
/ 21 февраля 2010

Следующий код отлично работает с <context:property-placeholder .../>:

@Component 
public class MyBean { 
    @Autowired
    public MyBean(@Value("${prop1}") String arg1, @Value("${prop2}") String arg2) { 
        // ... 
    } 
} 

Но <context:property-override .../> это очень специфическая вещь, она здесь не подходит.

...