Проблема
Решение
В xml-конфиге спринговых бинов есть некий бин, принимающий аргументом конструктора строку:
<constructor-arg index="0">Хочется эту строку формировать своим бином вместо хардкода ее в xml.
<value>xxx</value>
</constructor-arg>
Решение
Первая идея - унаследоваться от String и заменить <value> на <bean class="my.super.Bean">. Но нет - java.lang.String объявлен как final. Следующая мысль - использовать конструктор класса String, принимающий StringBuilder, и опять таки переопределить SpringBuilder своим классом. Но снова неудача - java.lang.StringBuilder также является final. Но StringBuilder уже лучше String'а тем, что имеет конструктор, принимающий CharSequence. А это - уже интерфейс, и его можно свободно имплементировать, реализовав ту логику, которую нужно. В итоге получаем нечто подобное:
<constructor-arg index="0">
<bean class="java.lang.String">
<constructor-arg>
<bean class="java.lang.StringBuilder">
<constructor-arg>
<bean class="my.super.CharSequenceImpl">
<!-- ... -->
</bean>
</constructor-arg>
</bean>
</constructor-arg>
</bean>
</constructor-arg>
Комментариев нет:
Отправить комментарий