Интересно, почему в Spring DI работает следующее определение бина (я использую создание экземпляра бина со статическим фабричным методом и Guava's Suppliers.ofInstance
):
<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>
но это не так:
<bean id="keySupplier" class="com.google.common.base.Suppliers"
factory-method="ofInstance">
<constructor-arg type="java.lang.String" value="someReallyLongValue" />
</bean>
Выдает следующее исключение:
org.springframework.beans.factory.BeanCreationException: Ошибка создания компонента с именем 'userRepo', определенным в ресурсе пути к классу:
(...)
Неудовлетворенная зависимость выражается через аргумент конструктора с индексом 0 типа [java.lang.Object]:
Неоднозначные типы аргументов метода фабрики - вы указали правильные ссылки на bean-компоненты как аргументы метода фабрики?
Проблема, в моем случае, когда я использую определение первого компонента с действительно длинной строкой в качестве значения, мой редактор разбивает строку после последнего символа строки, что приводит к тому, что строка передается с дополнительным пробелом для Suppliers.ofInstance
и в результате это нарушает мой код.
Второе определение будет более строгим в отношении пробелов, но, к удивлению, оно не работает (вероятно, оно не справляется с универсальным типом, несмотря на то, что тип указан в атрибуте типа).
Могу ли я заставить Spring игнорировать пробелы в теге <value>
?
Или я правильно использую <constructor-arg type="java.lang.String" value="someReallyLongValue" />
? Или я должен сообщить о проблеме, потому что это ошибка Spring?
Я бы предпочел не делать никаких предположений относительно строки (т. Е. Использовать string.trim()
здесь).