Quiero inyectar la URL de un recurso classpath de una manera que no cree una dependencia en Spring en el Bean. Es decir, el bean no debería usar las interfaces/clases de Spring. ¿Cómo puedo hacer eso?Primavera: Inyectar URL para el recurso classpath
Respuesta
primavera es capaz de convertir los valores en classpath:...
java.net.URL
implícitamente:
public class Foo {
private URL url;
...
}
.
<bean class = "Foo">
<property name = "url" value = "classpath:..." />
</bean>
Causado por: org.springframework.core.convert.ConversionFailedException: no se puede convertir el valor "classpath: etc/warmup.xml" de tipo 'java.lang.String' para escribir 'java.net.URL'; la excepción anidada es java.net.MalformedURLException: protocolo desconocido: classpath – IttayD
@IttayD: Funciona bien para mí en Spring 3.0.2. Tenga en cuenta que la ruta debe apuntar al recurso existente. – axtavt
Tengo la primavera 3.0.4. Miré el código fuente de la primavera y no puedo ver dónde manejaba "classpath:" urls diferentes. Por lo que veo, trivialmente intenta convertir a URL. No pude encontrar ninguna implementación URLStreamHandler para "classpath" – IttayD
Casi no hay nada que no sea de resorte que sea equivalente a Spring's resource concept.
Por ejemplo, puede usar Guava's InputSupplier como alternativa, pero le faltan características de resorte estándar potentes si lo hace.
cree su propia implementación de un recurso de resorte extendiendo org.springframework.core.io.ClassPathResource como MyClasspathResource extiende ClassPathResource e inyecte este tipo en su bean. De esta manera, no tienes ninguna dependencia con la primavera y luego puedes volver a implementar tu recurso con otra cosa.
<bean class="myBean">
<property name="classPathType">
<bean class="org.test.bla.MyClasspathResource">
<constructor-arg index="0" value="classpath:/org/test/bla/MyUrl" />
</bean>
</property>
</bean>
A raíz de la respuesta de axtavt, si se permitirán primavera anotaciones en el grano, puede hacerlo de esta manera:
@Value("classpath:myClasspathLocation") private URL url;
- 1. Java URL Protocols: classpath: /?
- 2. Recurso Classpath dentro del jar
- 3. primavera @Scheduled inyectar tiempo de retardo
- 4. Inyectar beans de primavera en EJB3
- 5. Inyectando un recurso classpath en un bean Spring 3
- 6. Cómo inyectar JPA EntityManager utilizando la primavera
- 7. Inyectar beans de primavera en RestEasy
- 8. primavera no se puede inyectar en el aspecto
- 9. FileNotFoundException..Classpath resource no encontrado en la primavera?
- 10. Ember datos URL recurso anidado
- 11. leer el archivo en classpath
- 12. Inyectar dependencia de primavera en super clase abstracta
- 13. Cómo inyectar beans de primavera en un jsp 2.0 SimpleTag?
- 14. carga un archivo (xml) desde el classpath en una aplicación web de primavera
- 15. Inyectar un recurso de archivo en Spring bean
- 16. Android -. Referencia dibujable recurso como un URL
- 17. ¿Puede SpineJS url() soportar el recurso anidado en rieles?
- 18. Establecer carpeta para classpath
- 19. cambie la URL sin cambiar el nombre del recurso
- 20. Querystring en URL de recurso REST
- 21. formulario para el recurso anidado
- 22. Configuración de beans de primavera
- 23. JavaEE 6: ¿Cómo inyectar el recurso JMS en un cliente JMS independiente?
- 24. dependencia inyectar servlet oyente
- 25. Inyectar CSS para la extensión de cromo
- 26. utilizando la ruta de clase: en primavera
- 27. Dado un recurso classpath, ¿hay alguna forma de obtener el objeto java.io.File que lo tiene/lo contiene?
- 28. ¿Cómo inyectar el inyector?
- 29. primavera
- 30. Reescriba las URL de redireccionamiento de seguridad de primavera
¿Qué quiere decir con "URL", exactamente? Este es un concepto bastante artificial con recursos classpath: ¿qué harías con esa URL? – skaffman
abrir una secuencia y leer de ella – IttayD
Si se trata de un recurso de ruta de clase, ¿por qué no solo inyectar la ruta en sí? Hay poco valor en la abstracción de recursos de Spring si no vas a usarlo. – skaffman