Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Spring 4 IoC и Java 8 - как иньектить конструктор? XML-config и указатель на конструктор 
:(
    Опции темы
Се ля ви
Дата 21.6.2014, 14:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java/SOAрхитектор
****


Профиль
Группа: Модератор
Сообщений: 2016
Регистрация: 5.6.2004
Где: place without tim e and space

Репутация: 3
Всего: 127



(До сих пор почему-то у нас нету отдельного форума по Spring`у, по-этому звиняйте - пишу сюда, поскольку от базовой Java это всё-таки дальше, ближе всего - к тематике Java EE)

Знаю, что XML-конфиги в Spring`е постепенно умирают (как минимум - не поддерживают generics), но пока не успел перестроиться на Groovy, пытаясь все текущие проблемы всё-таки как-то решать в рамках XML.

И вот встал новый вопрос - использую Java 8  со всеми её прелестями, в частности, указателями на функции. Необходимо при помощи Spring IoC через XML-конфиг иньектнуть в private`ное поле класса указатель на функцию (в моём конкретном случае - на контруктор).

Пишу:
Код
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:c="http://www.springframework.org/schema/c"
       xmlns:p="http://www.springframework.org/schema/p"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
                                                          http://www.springframework.org/schema/beans/spring-beans.xsd
                           http://www.springframework.org/schema/context
                                                      http://www.springframework.org/schema/context/spring-context.xsd">
    <!-- ... -->
    <bean id="atsConverter" class="ru.atc.bi.sd.transfer.excel.ExcelToCvsСonverter"
          p:generator="NoremReportRow::new"/>
    <!-- ... -->
</beans>

где ключевой момент - именно строка, являющаяся указателем на конструктор класса NoremReportRow:
p:generator="NoremReportRow::new"

Ругань возникает следующая:
Код
Exception in thread "main"
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'atsConverter'
defined in class path resource [spring-config.xml]: Initialization of bean failed; nested
exception is org.springframework.beans.ConversionNotSupportedException: Failed to convert property value
of type 'java.lang.String' to required type 'java.util.function.Function' for property 'generator'; nested
exception is java.lang.IllegalStateException: Cannot convert value of type [java.lang.String] to required type
[java.util.function.Function] for property 'generator': no matching editors or conversion strategy found...


Кто-нибудь с подобным сталкивался? Есть соображения, как лечить?


--------------------
  )
 (
[_])
проф. блог

Кролики думали, что занимаются любовью, а на самом деле их просто разводили...
PM MAIL WWW Skype GTalk   Вверх
Се ля ви
Дата 24.6.2014, 12:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java/SOAрхитектор
****


Профиль
Группа: Модератор
Сообщений: 2016
Регистрация: 5.6.2004
Где: place without tim e and space

Репутация: 3
Всего: 127



В общем, пока не нашёл ничего лучше, кроме как по-старинке, как в Java 7 работать - создавать в отдельных файлах реализацию функционального интерфейса и передавать его экземпляр как именованного класса... И изучать Groovy и переходить в своих проектах с XML-конфигов на Groovy-конфиги в надежде на то, что там такой проблемы не будет...


--------------------
  )
 (
[_])
проф. блог

Кролики думали, что занимаются любовью, а на самом деле их просто разводили...
PM MAIL WWW Skype GTalk   Вверх
Се ля ви
Дата 8.7.2014, 20:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java/SOAрхитектор
****


Профиль
Группа: Модератор
Сообщений: 2016
Регистрация: 5.6.2004
Где: place without tim e and space

Репутация: 3
Всего: 127



Нашёл несколько более элегантное решение - т.к. по-умолчанию все bean`ы Spring - это singleton`ы (и этого, как правило, достаточно), можно вытаскивать их по нескольку раз.

Вот я и вытаскиваю предварительно их вначале - и инъектю то, что надо, что бы при последующих доставаниях оно там уже было.

Более элегантно это можно сделать через BeanFactoryPostProcessor, но пока всё никак руки не доходят этим заняться...


--------------------
  )
 (
[_])
проф. блог

Кролики думали, что занимаются любовью, а на самом деле их просто разводили...
PM MAIL WWW Skype GTalk   Вверх
Kircul
Дата 9.7.2014, 00:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 166
Регистрация: 20.2.2007

Репутация: 1
Всего: 7



Я конечно мало чего понял из описания, но мне что-то подсказывает что для достижения цели надо использовать factory method: http://docs.spring.io/spring/docs/4.0.5.RE...-factory-method
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.0651 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.