Tôi muốn tiêm URL của tài nguyên classpath theo cách không tạo phụ thuộc vào Spring in the Bean. Có nghĩa là, bean không nên sử dụng các giao diện/lớp của Spring. Làm thế nào tôi có thể làm điều đó?Mùa xuân: Tiêm URL cho tài nguyên lớp học
Trả lời
mùa xuân có thể chuyển đổi classpath:...
giá trị vào java.net.URL
ngầm:
public class Foo {
private URL url;
...
}
.
<bean class = "Foo">
<property name = "url" value = "classpath:..." />
</bean>
Gây ra bởi: org.springframework.core.convert.ConversionFailedException: Không thể chuyển đổi giá trị "classpath: etc/warmup.xml" từ loại 'java.lang.String' thành loại 'java.net.URL'; ngoại lệ lồng nhau là java.net.MalformedURLException: giao thức không xác định: classpath – IttayD
@IttayD: Hoạt động tốt cho tôi trong Spring 3.0.2. Lưu ý rằng đường dẫn phải trỏ đến tài nguyên hiện có. – axtavt
Tôi có mùa xuân 3.0.4. Tôi nhìn vào mã nguồn của mùa xuân và không thể nhìn thấy nơi nó xử lý "classpath:" url bất kỳ khác nhau. Từ những gì tôi thấy nó thường xuyên cố gắng chuyển đổi sang URL. Tôi không thể tìm thấy bất kỳ triển khai URLStreamHandler nào cho "classpath" – IttayD
Hầu như không có bất kỳ điều gì không phải mùa xuân tương đương với Spring's resource concept.
Ví dụ: bạn có thể sử dụng Guava 'InputSupplier làm phương án thay thế, nhưng bạn thiếu các tính năng mùa xuân tiêu chuẩn mạnh mẽ nếu bạn làm.
tạo việc triển khai tài nguyên lò xo của riêng bạn bằng cách mở rộng org.springframework.core.io.ClassPathResource như MyClasspathResource mở rộng ClassPathResource và đưa loại này vào bean của bạn. Như thế này bạn không có bất kỳ sự phụ thuộc nào vào mùa xuân và sau đó có thể reimplement tài nguyên của bạn với một thứ khác.
<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>
Tiếp theo từ câu trả lời axtavt, nếu bạn sẽ cho phép bản thân Học Kỳ Mùa Xuân chú thích trong đậu, bạn có thể làm điều đó như thế này:
@Value("classpath:myClasspathLocation") private URL url;
- 1. shortcut cho tiêm chuỗi với mùa xuân
- 2. tiêm đậu mùa xuân trong một lớp phương pháp chính
- 3. Mùa xuân - tiêm 2 hạt cùng loại
- 4. mùa xuân tiêm tĩnh (toàn cầu) singleton
- 5. Mùa xuân - Tiêm phụ thuộc vào ServletContextListener
- 6. Tiêm đậu mùa xuân bằng CDI @Inject
- 7. Mùa xuân - Viết lại một URL cho một URL khác
- 8. Mùa xuân: Ủy quyền cho trình bao bọc proxy tùy chỉnh cho giao diện tiêm
- 9. Dây mùa xuân lớp tĩnh
- 10. tiêm vào mùa xuân trong bộ lọc servlet
- 11. cấu hình đậu mùa xuân
- 12. mùa xuân trong Mockito
- 13. Tiêm động lực mùa xuân, kiểu giống như nhà máy
- 14. Vấn đề với lớp mùa xuân @Configuration
- 15. Powermock và mùa xuân nguyên nhân ConversionException khi tiêm EntityManager trong thử nghiệm
- 16. Phụ thuộc mùa xuân Tiêm một chú thích Aspect
- 17. Dữ liệu mùa xuân MongoDb cho kế thừa lớp
- 18. Tài nguyên tốt cho việc học WPF
- 19. tài nguyên học tập cho mockito
- 20. Tài nguyên cho việc học LINQ?
- 21. Delphi = Pascal? Tài nguyên cho việc học?
- 22. Tiêm phụ thuộc vào mùa xuân trong lớp siêu trừu tượng
- 23. Làm thế nào để chế nhạo mùa xuân lớp tiêm sử dụng JMockit
- 24. Nguyên tắc cơ bản của mùa xuân Autowire
- 25. Tải tài nguyên theo mùa xuân trong máy chủ ứng dụng websphere
- 26. Số nguyên xác nhận chú thích mùa xuân mvc
- 27. Ghi lại URL chuyển hướng bảo mật mùa xuân
- 28. Siêu lớp mùa xuân tự động
- 29. mùa xuân cho danh sách
- 30. Tiêm phụ thuộc vào mùa xuân: Tiêm tất cả các trường hợp của giao diện
Ý anh là gì bởi "URL", chính xác? Đây là một khái niệm khá nhân tạo với các tài nguyên classpath - bạn sẽ làm gì với URL đó? – skaffman
mở một luồng và đọc từ đó – IttayD
Nếu đó là tài nguyên classpath, tại sao không chỉ tiêm đường dẫn chính nó? Có rất ít giá trị trong tài nguyên Spring trừu tượng nếu bạn không sử dụng nó. – skaffman