Tôi tự hỏi tại sao trong mùa xuân DI định nghĩa bean sau làm việc (tôi sử dụng bean instantiation with a static factory method và ổi của Suppliers.ofInstance
):phương pháp Generic nhà máy ở Xuân DI
<bean id="keySupplier" class="com.google.common.base.Suppliers"
factory-method="ofInstance">
<constructor-arg>
<value type="java.lang.String">someReallyLongValue <!-- note line break here -->
</value>
</constructor-arg>
</bean>
nhưng điều này không:
<bean id="keySupplier" class="com.google.common.base.Suppliers"
factory-method="ofInstance">
<constructor-arg type="java.lang.String" value="someReallyLongValue" />
</bean>
Nó ném theo ngoại lệ sau:
org.springframework.beans.factory.BeanCreationException: Lỗi creatin g đậu với tên 'userRepo' định nghĩa trong đường dẫn lớp tài nguyên:
(...)
phụ thuộc không được đáp ứng thể hiện qua tranh luận constructor với chỉ số 0 của loại [java.lang.Object]:
nhập nhằng các loại phương pháp nhà máy đối số - đã làm bạn chỉ định các tham chiếu bean đúng như các đối số phương thức của nhà máy?
Vấn đề là, trong trường hợp của tôi, khi tôi sử dụng định nghĩa bean đầu tiên với chuỗi rất dài như một giá trị dòng phá vỡ biên tập viên của tôi sau khi ký tự cuối cùng của chuỗi, gây rằng chuỗi được thông qua với thêm khoảng trắng-Suppliers.ofInstance
và kết quả là nó phá vỡ mã của tôi.
Định nghĩa thứ hai sẽ nghiêm ngặt hơn về khoảng trắng nhưng đáng ngạc nhiên là nó không hoạt động (có thể không đối phó với kiểu chung, mặc dù loại được chỉ định trong thuộc tính type).
Tôi có thể buộc Spring bỏ qua khoảng trắng trong thẻ <value>
bằng cách nào đó không?
Hoặc tôi có sử dụng <constructor-arg type="java.lang.String" value="someReallyLongValue" />
đúng cách không? Hoặc tôi nên nộp một vấn đề vì nó là một lỗi mùa xuân?
Tôi không muốn đưa ra bất kỳ giả định nào về chuỗi (ví dụ: sử dụng string.trim()
tại đây).
Trước tiên, định cấu hình trình chỉnh sửa XML của bạn để không tự động ngắt dòng chèn. Nếu không có tùy chọn như vậy, hãy thay đổi trình soạn thảo;) –
@YvesMartin Tôi có thể cấu hình trình soạn thảo của mình để làm như vậy, nhưng nếu ai đó trong tương lai thực hiện định dạng (đơn giản 'CSf' trong Eclipse), tôi không thích thực tế là ứng dụng sẽ bị phá vỡ vì điều đó. – Xaerxess
Vấn đề như vậy sẽ luôn tồn tại. Bạn nên di chuyển thông tin văn bản đó vào tệp thuộc tính. –