В моем приложении Spring 3.0 у меня есть несколько ресурсов в /WEB-INF/dir
. Во время выполнения мне нужны некоторые из них как InputStream
(или какой-то другой тип). Как я могу их получить? Можно ли вводить их как обычный Resource
?
Spring 3.0 вставлять файлы в качестве ресурсов
Ответ 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();
}
Ответ 5
Если вы не хотите вводить зависимость от Spring, выполните описанный ниже подход: Заполнить поле файла Spring Bean через аннотацию