2010-01-14 2 views
1

У меня есть класс Spring MVC Controller, которому требуется набор свойств из файла config.properties. Я думал, что, поскольку я уже использовал этот файл конфигурации, чтобы установить некоторые свойства db, я мог бы получить к нему доступ аналогичным образом, чтобы установить это свойство. Разница в том, что мой класс Controller аннотируется и не объявляется в XML-файле, поэтому я не могу установить это свойство обычным способом. У меня есть мои config.properties готовые для использования в моем файле XML, как так:Использовать объект Spring XML для установки свойства в аннотированном файле?

<context:property-placeholder location="/WEB-INF/config.properties" /> 

Я хотел бы установить следующее свойство в моем классе контроллера от записи в этом файле свойств:

@Controller 
public class SampleUploadController { 

    private String audioFilePath; 
    public String getAudioFilePath() { 
     return audioFilePath; 
    } 
    // I want this set from the properties file I've declared in my 
    // XML file: e.g. ${props.audioFilePath} 
    public void setAudioFilePath(String audioFilePath) { 
     this.audioFilePath = audioFilePath; 
    } 
} 

Возможно ли это. Если нет, может кто-нибудь предложить, как получить требуемое свойство из файла конфигурации? Он расположен в моем корне WEB-INF. Проблема в том, что на данный момент у меня нет доступа к ServletContext, чтобы получить ссылку на этот файл.

ответ

2

Весной 3, вы можете использовать аннотацию @Value, чтобы сделать это, например.

@Value("${props.audioFilePath}") 
public void setAudioFilePath(String audioFilePath) { 
    this.audioFilePath = audioFilePath; 
} 
+0

Прекрасное спасибо. Один вопрос, где аннотация @Value ищет это значение? Просматривает ли он все владельцы свойств, известные контейнером Spring? –

+0

Я так считаю, да. Он использует тот же механизм, что и если вы указали его с помощью '' – skaffman

0

Skaffman является правильным, но имейте в виду, что свойства, загруженные для использования, работают только в их собственном контексте. Например, если у вас есть родительский модуль контекста приложения, который загружает свойства, вы не можете использовать @Value в компонентах, выделенных в контексте сервлета, с этими свойствами ... они просто не видны.

Смежные вопросы