| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java EE (J2EE) и Spring > Spring 4 IoC и Java 8 - как иньектить конструктор? |
| Автор: Се ля ви 21.6.2014, 14:12 | ||||
| (До сих пор почему-то у нас нету отдельного форума по Spring`у, по-этому звиняйте - пишу сюда, поскольку от базовой Java это всё-таки дальше, ближе всего - к тематике Java EE) Знаю, что XML-конфиги в Spring`е постепенно умирают (как минимум - не поддерживают generics), но пока не успел перестроиться на Groovy, пытаясь все текущие проблемы всё-таки как-то решать в рамках XML. И вот встал новый вопрос - использую Java 8 со всеми её прелестями, в частности, указателями на функции. Необходимо при помощи Spring IoC через XML-конфиг иньектнуть в private`ное поле класса указатель на функцию (в моём конкретном случае - на контруктор). Пишу:
где ключевой момент - именно строка, являющаяся указателем на конструктор класса NoremReportRow: p:generator="NoremReportRow::new" Ругань возникает следующая:
Кто-нибудь с подобным сталкивался? Есть соображения, как лечить? |
| Автор: Се ля ви 24.6.2014, 12:07 |
| В общем, пока не нашёл ничего лучше, кроме как по-старинке, как в Java 7 работать - создавать в отдельных файлах реализацию функционального интерфейса и передавать его экземпляр как именованного класса... И изучать Groovy и переходить в своих проектах с XML-конфигов на Groovy-конфиги в надежде на то, что там такой проблемы не будет... |
| Автор: Се ля ви 8.7.2014, 20:06 |
| Нашёл несколько более элегантное решение - т.к. по-умолчанию все bean`ы Spring - это singleton`ы (и этого, как правило, достаточно), можно вытаскивать их по нескольку раз. Вот я и вытаскиваю предварительно их вначале - и инъектю то, что надо, что бы при последующих доставаниях оно там уже было. Более элегантно это можно сделать через BeanFactoryPostProcessor, но пока всё никак руки не доходят этим заняться... |
| Автор: Kircul 9.7.2014, 00:44 |
| Я конечно мало чего понял из описания, но мне что-то подсказывает что для достижения цели надо использовать factory method: http://docs.spring.io/spring/docs/4.0.5.RELEASE/spring-framework-reference/html/beans.html#beans-factory-class-instance-factory-method |