Подтвердить что ты не робот

Spring 3.0 вставлять файлы в качестве ресурсов

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

4b9b3361

Ответ 1

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

import org.springframework.core.io.Resource;

@Value("classpath:<path to file>")
private Resource cert;

Ответ 2

Все ApplicationContext являются, по определению, ResourceLoader s. Это означает, что они способны разрешать любые строки ресурсов, найденные в их конфигурации. Имея это в виду, вы можете объявить свою цель bean установщиком, который принимает org.springframework.core.io.Resource. Затем, когда вы настраиваете целевой bean, просто используйте путь ресурса в значении свойства. 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>

Ответ 3

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

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

где appContext - ваш Spring ApplicationContext (в частности, WebApplicationContext, так как у вас есть webapp)

Ответ 4

Здесь приведен полный пример для извлечения ресурса pathpath. Я использую его для захвата 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();
}