Chcę wstawić adres URL zasobu klasy clas w sposób, który nie powoduje zależności od Spring in the Bean. Oznacza to, że komponent bean nie powinien używać interfejsów/klas Spring. Jak mogę to zrobić?Spring: Inject URL dla zasobu classpath
Odpowiedz
Wiosna jest w stanie przerobić classpath:...
wartości do java.net.URL
domyśle:
public class Foo {
private URL url;
...
}
.
<bean class = "Foo">
<property name = "url" value = "classpath:..." />
</bean>
Powodowane przez: org.springframework.core.convert.ConversionFailedException: Nie można skonwertować wartości "classpath: etc/warmup.xml" z typu 'java.lang.String' na type 'java.net.URL'; Zagnieżdżony wyjątek to java.net.MalformedURLException: unknown protocol: classpath – IttayD
@IttayD: Działa dobrze dla mnie na wiosnę 3.0.2. Zauważ, że ścieżka musi wskazywać na istniejący zasób. – axtavt
Mam wiosnę 3.0.4. Przyjrzałem się źródłowi kodu źródłowego i nie widziałem, gdzie obsługiwane są adresy URL "classpath:". Z tego, co widzę, trywialnie próbuje przekonwertować na URL. Nie mogłem znaleźć żadnej implementacji URLStreamHandler dla "classpath" – IttayD
Nie ma prawie nic poza sprężyną, która jest odpowiednikiem Spring's resource concept.
Jako alternatywę można użyć alternatywy GuavaInputSupplier, ale w przypadku braku standardowych funkcji sprężyn standardowych.
Utwórz własną implementację zasobu źródłowego, rozszerzając gałąź org.springframework.core.io.ClassPathResource, np. MyClasspathResource, rozszerza ClassPathResource i dodaje ten typ do komponentu bean. W ten sposób nie masz żadnej zależności od wiosny i możesz później ponownie wprowadzić swój zasób w coś innego.
<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>
W nawiązaniu do odpowiedzi axtavt, o ile pozwolisz sobie Wiosna adnotacji w fasoli, można zrobić to tak:
@Value("classpath:myClasspathLocation") private URL url;
- 1. java.nio.file.Path dla zasobu classpath
- 2. Java URL Protocols: classpath: /?
- 3. Jaka jest różnica między "classpath:" a "classpath: /" w Spring XML?
- 4. Wstrzyknięcie fasoli Spring za pomocą CDI @ Inject
- 5. Inject CSS dla rozszerzenia chrome
- 6. Wstrzyknięcie zasobu ścieżki klasy do komponentu Spring 3 bean
- 7. Wzór dekoratora i @Inject
- 8. Spring MVC configure url-pattern
- 9. Spring Boot Rest - jak skonfigurować 404 - nie znaleziono zasobu
- 10. Wildcard classpath @PropertySource
- 11. Czy Spring Spring może zrozumieć, że @Inject zastępuje Weld jako implementację JSR-299?
- 12. zmienić adres URL bez zmiany nazwy zasobu
- 13. Przełącz host zasobu dla kontrolera
- 14. Formularz dla zasobu zagnieżdżonego
- 15. Jak wygenerować adres URL zasobu z usługi?
- 16. Android. - Reference odkształcalne zasobu jako adres URL
- 17. Spring conditional default-target-url
- 18. ClassPath w Ant dla zadania Javac
- 19. Względne ścieżki w źródle classpath wiosny
- 20. Jackson Databind classpath issue
- 21. java.nio.file.Path dla adresów URL?
- 22. Tworzenie niestandardowej adnotacji @Inject
- 23. Gulp-Inject nie działa
- 24. Inject vs ManagedProperty
- 25. szyn: uzyskanie „nowej” drogi dla zagnieżdżonych zasobu
- 26. Spring Boot nadal wymaga odnowienia zasobu w web.xml
- 27. Rozkaz przechwytujący-url Spring Security 3.0
- 28. zapisać obraz w rolki aparatu i uzyskać adres URL zasobu
- 29. moja aplikacja nie otwartym ServletContext zasobu
- 30. WildFly Swarm Nullpointer @Inject bean
Co masz na myśli przez „URL”, dokładnie? Jest to dość sztuczna koncepcja z zasobami klasy clas - co byś zrobił z tym URL? – skaffman
otwórz strumień i odczytaj z niego – IttayD
Jeśli jest to zasób ścieżki klasy, dlaczego nie wystarczy wstrzyknąć samej ścieżki? W przypadku abstrakcji zasobów wiosennych jest mało wartości, jeśli nie zamierzasz jej użyć. – skaffman