Spring 3.0 внедряет файлы как ресурсы - PullRequest
35 голосов
/ 20 сентября 2011

В моем приложении Spring 3.0 у меня есть некоторые ресурсы в /WEB-INF/dir. Во время выполнения мне нужны некоторые из них как InputStream (или какой-то другой тип). Как я могу получить их? Можно ли их как обычно вводить Resource?

Ответы [ 5 ]

68 голосов
/ 25 марта 2014

Вот самый простой способ сделать это с помощью аннотации:

import org.springframework.core.io.Resource;

@Value("classpath:<path to file>")
private Resource cert;
6 голосов
/ 20 сентября 2011

Все ApplicationContext с по определению ResourceLoader с. Это означает, что они способны разрешать любые строки ресурсов, найденные в их конфигурации. Имея это в виду, вы можете объявить ваш целевой бин с помощью установщика, который принимает org.springframework.core.io.Resource. Затем, когда вы настраиваете целевой компонент, просто используйте путь ресурса в значении для свойства. Spring попытается преобразовать значение String в вашей конфигурации в Resource.

public class Target {
  private Resource resource;
  public void setResource(final Resource resource) {
    this.resource = resource;
  }
}

//configuration
<beans>
  <bean id="target" class="Target">
    <property name="resource" value="classpath:path/to/file"/>
  </bean>
</beans>
2 голосов
/ 20 сентября 2011

Вы должны иметь возможность использовать:

Resource resource = appContext.getResource("classpath:<your resource name>");
InputStream is = resource.getInputStream();

, где appContext - это ваш Spring ApplicationContext (в частности, WebApplicationContext, поскольку у вас есть веб-приложение)

1 голос
/ 20 сентября 2011

Вот полный пример для получения ресурса classpath.Я использую его для захвата файлов SQL с действительно сложными запросами, которые я не хочу хранить в классах Java:

public String getSqlFileContents(String fileName) {
    StringBuffer sb = new StringBuffer();
    try {
        Resource resource = new ClassPathResource(fileName);
        DataInputStream in = new DataInputStream(resource.getInputStream());
        BufferedReader br = new BufferedReader(new InputStreamReader(in));
        String strLine;
        while ((strLine = br.readLine()) != null) {
            sb.append(" " + strLine);
        }
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    return sb.toString();
}
0 голосов
/ 20 сентября 2011

Если вы не хотите вводить зависимость от Spring, следуйте подходу, описанному здесь: Заполните поле File Spring Bean с помощью аннотации

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...