En mi aplicación Spring 3.0, tengo algunos recursos en /WEB-INF/dir
. En tiempo de ejecución necesito algunos de ellos como InputStream
(o algún otro tipo). ¿Cómo puedo recuperarlos? ¿Es posible inyectarlos como un Resource
normal?Spring 3.0 inyecte archivos como recursos
Respuesta
Aquí es una forma más fácil de hacerlo a través de la anotación:
import org.springframework.core.io.Resource;
@Value("classpath:<path to file>")
private Resource cert;
Usted debe ser capaz de usar:
Resource resource = appContext.getResource("classpath:<your resource name>");
InputStream is = resource.getInputStream();
donde appContext
es su primavera ApplicationContext
(específicamente, un WebApplicationContext, ya que tiene una aplicación web)
El ' La interfaz de Resource no declara un método 'getInputStream()', necesitarías llamar 'new FileInputStream (resource.getFile())'. –
Eso es incorrecto. 'Resource' lo hereda de la interfaz' org.springframework.core.io.InputStreamSource' – Saket
Lo siento, lo siento, no vi los 'implements'. –
Si no desea introducir la dependencia de la primavera , siga el enfoque detallado aquí: Populate Spring Bean's File field via Annotation
No veo cómo alguna de las respuestas a esa pregunta da como resultado una dependencia reducida en Spring ... –
Acepto que usar @Value no es una dependencia cero de primavera. –
Pero las anotaciones son la mejor manera de lograr la inyección de resorte sin violar el principio de no repetir. El enfoque XML que recomiendas te obliga a repetirte. Tarde o temprano, alguien va a cambiar el nombre de la propiedad en el archivo java y olvidará actualizar el archivo de definición de Spring Bean. –
Todos ApplicationContext
s son, por definición, ResourceLoader
s. Esto significa que son capaces de resolver cualquier cadena de recursos encontrada dentro de su configuración. Con esto en mente, puede declarar su bean objetivo con un colocador que acepte un org.springframework.core.io.Resource
. Luego, cuando configure el bean objetivo, solo use una ruta de recursos en el valor de la propiedad. Spring intentará convertir el valor String
en su configuración en 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>
Aquí hay un ejemplo completo para recuperar un recurso de ruta de clase. Yo lo uso para agarrar los archivos SQL que tienen consultas muy complejas que no desea almacenar en las clases de 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();
}
- 1. Jersey: Inyecte el componente Spring en ContainerRequestFilter
- 2. Archivos de propiedades múltiples en Spring 3.0
- 3. Spring 3.0 CABEZA Pide
- 4. Spring 3.0 MVC objeto anidado vinculante
- 5. Spring Security 3.0 intercept-url order
- 6. Spring 3.0 Security - Autorización con autenticación
- 7. Integración GWT 2.0 con Spring Security 3.0
- 8. Spring 3.0 ORM con JPA 2.0 ClassCastException
- 9. Spring 3.0 MVC MVC: etiqueta vista-controlador
- 10. Spring 3.0 REST implementation or Jersey?
- 11. Spring 3.0 - @Transactional runtime change timeout
- 12. Cómo definir un EnumMap en Spring 3.0
- 13. Spring MVC 3.0 y Apache Tiles 2
- 14. Selección múltiple en Spring 3.0 MVC
- 15. Spring 3.0 haciendo respuesta JSON usando Jackson mensaje convertidor de
- 16. Con Spring 3.0, ¿puedo crear una variable de ruta opcional?
- 17. Spring 3.0 establece y obtiene el atributo de sesión
- 18. ¿Cómo mostrar un DateTime formateado en Spring MVC 3.0?
- 19. JAR mínimos para la inyección de dependencia Spring 3.0
- 20. Spring 3.0 Error: java.lang.NoClassDefFoundError: org/aspectj/lang/NoAspectBoundException
- 21. Spring MVC 3.0: ¿Cómo puedo enlazar a un objeto persistente?
- 22. ¿Cómo registrar los interceptores de controlador con spring mvc 3.0?
- 23. ¿Utilizando Spring MVC 3.0 y la anotación @EJB sin mappedName?
- 24. Jersey con muelle 3.0?
- 25. Los archivos JPEG no funcionan como recursos dibujables: los archivos png funcionan bien
- 26. Archivos de recursos (RESX) estropeados
- 27. diferentes archivos WAR, recursos compartidos
- 28. Cómo hacer que el resorte inyecte valor en un campo estático
- 29. Exponer recursos de archivos jar en aplicaciones web (Tomcat7)
- 30. Spring-JDBC como biblioteca independiente
¡Eso es genial! – Kong
¿Alguna idea sobre cómo se puede cargar un directorio? Por ejemplo, un directorio "dir" que contiene 25 archivos –
Eso es genial, pero puede no funcionar dentro del archivo jar. –