|
|
|
Autowired в Spring Boot + Vaadin
|
|||
|---|---|---|---|
|
#18+
Всем здравствуйте Столкнулся с проблемкой (которая не новая), а именно не работает autowired в ваадиновских объектах. Везде ответ один, мол спринг инжектит в свои бины, в которых есть аннотация autowired и ничего не знает о классах ваадина (ну и понятно ничего туда "сварить" не может). Уже даже и не знаю, как показать спрингу объекты ваадина, чтобы заработал autowired. На борту имею vaadin 7.7.3, spring boot 1.4.1, java 1.8. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. здесь пытаюсь объявить CreateHospital бином, чтобы спринг его увидел Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. сам ваадиноский класс, в котором не работает autowired Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. вот в конечном итоге при создании нового госпиталя мой hospitalService всегда null. Я уже даже не знаю в какую сторону смотреть. Помогите пожалуйста ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2016, 13:18 |
|
||
|
Autowired в Spring Boot + Vaadin
|
|||
|---|---|---|---|
|
#18+
мой pom (на всякий случай) Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2016, 13:30 |
|
||
|
Autowired в Spring Boot + Vaadin
|
|||
|---|---|---|---|
|
#18+
kuppidon, Вы самостоятельно вызываете new CreateHospital(new Hospital()) - создаёте новые экземпляры объектов, про которые спринг вообще ничгео не знает и не узнает. Вам нужно либо не создавать эти объекты, а брать из Spring Либо после того как вы сказали, попросить Spring "провайрить" ваши объекты. Как именно интегрировать Vaadin и Spring - не знаю. Scope этих бинов мне на вскидку не ясен. Но мне кажется, вам банально стоит посмотреть любой рабочий пример этой интеграции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2016, 13:37 |
|
||
|
Autowired в Spring Boot + Vaadin
|
|||
|---|---|---|---|
|
#18+
я вас уверяю, что я смотрел не один (объявленный как рабочий) пример... последние два дня перелопатил не один сайт, форум и т.п. Делал все, как было в тех примерах, но результат всегда один и тот же... просто за эти два дня уже так все перемешалось в голове (столько этих примеров было), что мозг уже просто "отказывается" что-либо воспринимать и вполне возможно, что ошибка где-то под носом, но я ее просто не могу "воспринять".... просто уже руки опустились и решил обратится на форум за помощью ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2016, 13:46 |
|
||
|
Autowired в Spring Boot + Vaadin
|
|||
|---|---|---|---|
|
#18+
kuppidon, Вам нужно в StarterUI инжектить ваш CreateHospital через @Autowired Возможно ему надо и Scope какой-то особый указать. Это синглтон или нет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2016, 13:48 |
|
||
|
Autowired в Spring Boot + Vaadin
|
|||
|---|---|---|---|
|
#18+
kuppidonя вас уверяю, что я смотрел не один (объявленный как рабочий) пример... последние два дня перелопатил не один сайт, форум и т.п. Делал все, как было в тех примерах, но результат всегда один и тот же... просто за эти два дня уже так все перемешалось в голове (столько этих примеров было), что мозг уже просто "отказывается" что-либо воспринимать и вполне возможно, что ошибка где-то под носом, но я ее просто не могу "воспринять".... просто уже руки опустились и решил обратится на форум за помощью Офигеть. Вы девушка? Обычно тут дамы кучу текста вываливают и ни слова по делу. Так что на счет того чтобы убрать new CreateHospital() из кода? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2016, 13:50 |
|
||
|
Autowired в Spring Boot + Vaadin
|
|||
|---|---|---|---|
|
#18+
переделал в классе StarterUI код кнопки создания госпиталя Код: java 1. 2. в CreateHospital добавил метод Код: java 1. 2. 3. при старте вываливается ошибка org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'createHospital' defined in class path resource [ua/doctors/book/vaadin/VaadinAutoConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [ua.doctors.book.view.CreateHospital]: Factory method 'createHospital' threw exception; nested exception is java.lang.NullPointerException ****** ***** ***** ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2016, 14:05 |
|
||
|
Autowired в Spring Boot + Vaadin
|
|||
|---|---|---|---|
|
#18+
полный текст ошибки в файле ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2016, 14:09 |
|
||
|
Autowired в Spring Boot + Vaadin
|
|||
|---|---|---|---|
|
#18+
kuppidon, Вы сделали те же яйца, только сбоку. Вместо того чтобы брать объект из спринга, вы его создаёте. Я же сказал убрать конструктор, а не перенести в другой метод. Откройте ссылку https://spring.io/guides/gs/crud-with-vaadin/ Посмотрите класс VaadinUI особенно вот это место: Код: java 1. 2. CustomerEditor это и есть класс аналогичный вашему CreateHospital. Обратите внимание на аннотации. Там помимо @SpringComponent ещё и @ScopeUI (мне кажется это важно) Ну, и вообще create hospital это действие. Так называют методы. Классы называют существительными. Например CreateHospitalWindow или NewHospitalWindow. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2016, 14:12 |
|
||
|
Autowired в Spring Boot + Vaadin
|
|||
|---|---|---|---|
|
#18+
kuppidonполный текст ошибки в файле Да, пофигу. Тот же самый NPE. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2016, 14:13 |
|
||
|
Autowired в Spring Boot + Vaadin
|
|||
|---|---|---|---|
|
#18+
ну если в двух словах, то в предложенном примере они реализуют вариант, который я оставляю на САМЫЙ крайний случай, то есть, они просто в конструктор объекта передают уже савтоваренный репозиторий... то есть автоварка репозитория происходит не в ваадиновском классе, а в VaadinUI и потом передается в класс ваадина..... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2016, 15:07 |
|
||
|
Autowired в Spring Boot + Vaadin
|
|||
|---|---|---|---|
|
#18+
kuppidonну если в двух словах, то в предложенном примере они реализуют вариант, который я оставляю на САМЫЙ крайний случай Что с ним не так. Я вам указываю на вашу ошибку - создание через конструктор объекта, который должен создавать фреймверк, а не ваш код. kuppidonто есть, они просто в конструктор объекта передают уже савтоваренный репозиторий... Странно что вы говорите про репозиторий. Я указывал на Editor, который является таким же UI как ваш Window. kuppidonто есть автоварка репозитория происходит не в ваадиновском классе, а в VaadinUI и потом передается в класс ваадина..... Это какой-то набор слов. Autowire не происходит в каком либо в классе в принципе. Это указание Spring контейнеру взять из контекста бины и просетить куда надо. Разница между вашим примером и тем что по ссылке только в использовании поля. С полем могут быть проблемы если у CreateHospital и StarterUI разный scope. Но так как они оба являются VaadinUI, я подозреваю что у них scope один и тот же и проблемы с полем быть не должно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2016, 15:14 |
|
||
|
Autowired в Spring Boot + Vaadin
|
|||
|---|---|---|---|
|
#18+
kuppidonт не в ваадиновском классе, а в VaadinUI и потом передается в класс ваадина..... здесь чуть поправлюсь, так как VaadinUI это тоже ваадиновский класс, который спринг видит и в нем автоварка работает ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2016, 15:14 |
|
||
|
Autowired в Spring Boot + Vaadin
|
|||
|---|---|---|---|
|
#18+
kuppidonkuppidonт не в ваадиновском классе, а в VaadinUI и потом передается в класс ваадина..... здесь чуть поправлюсь, так как VaadinUI это тоже ваадиновский класс, который спринг видит и в нем автоварка работает StarterUI это ваадиновский класс? В нем autowire работает? Вы хотите интегрировать Spring и Vaadin без Spring Vaadin интеграции или что? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2016, 15:16 |
|
||
|
Autowired в Spring Boot + Vaadin
|
|||
|---|---|---|---|
|
#18+
BlazkowiczStarterUI это ваадиновский класс? да, это ваадиновский, наследник UI (а UI это ваадиновское произведение) BlazkowiczВ нем autowire работает? да, в этом классе все работате BlazkowiczВы хотите интегрировать Spring и Vaadin без Spring Vaadin интеграции или что? я хочу , чтобы Spring контейнеру взять из контекста бин HospitalService и присоединил его в класс CreateHospital ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2016, 15:25 |
|
||
|
Autowired в Spring Boot + Vaadin
|
|||
|---|---|---|---|
|
#18+
[quot Blazkowicz]Странно что вы говорите про репозиторий. Я указывал на Editor, который является таким же UI как ваш Window./quot] если провести параллель, то у меня с Editorom нет проблем, у меня как раз проблема с репозиторием (в моем случае это сервис HospitalService).... в примере в конструктор уже передается готовый репозиторий, а мне необходимо чтобы спринг добавил этот репозиторий в мой класс CreateHospital (чтобы не передавать в конструкторе) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2016, 15:31 |
|
||
|
Autowired в Spring Boot + Vaadin
|
|||
|---|---|---|---|
|
#18+
kuppidonя хочу , чтобы Spring контейнеру взять из контекста бин HospitalService и присоединил его в класс CreateHospital Пишите, пожалуйста, по-русски. Тяжело распарсить. Чтобы Spring мог положить HospitalService в CreateHospital нужно чтобы - Spring сам создал CreateHospital. - Вы создали CreateHospital, как у вас сейчас и потом сообщили Spring-у о нём. Я вам об этом и написал в первом ответе. Второй вариант кривоват, так как для него вам нужно ещё иметь и ссылку на контекст. Вы как-то пытаетесь сделать оба варианта. Сначала вы указываете @SpringComponent, чтобы вроде как спринг сам создал этот бин. Но потом вы вместо того чтобы его проинжекстить, с какого-то перепугу создаёте ещё один экземпляр через конструктор. Вы определитесь что ли, кто из вас двоих будет создавать объект, вы или Framework. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2016, 15:34 |
|
||
|
Autowired в Spring Boot + Vaadin
|
|||
|---|---|---|---|
|
#18+
kuppidonесли провести параллель, то у меня с Editorom нет проблем, у меня как раз проблема с репозиторием Вы не туда смотрите. У вас проблема не в том что HospitalService не инъектится, а в том что CreateHospital не инъектится. И вы этот факт упорно игнорируете. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2016, 15:35 |
|
||
|
Autowired в Spring Boot + Vaadin
|
|||
|---|---|---|---|
|
#18+
BlazkowiczЧтобы Spring мог положить HospitalService в CreateHospital нужно чтобы - Spring сам создал CreateHospital. вот здесь абсолютно согласен и я думал, что объявление бином моего класса CreateHospital как раз это и делает, заставляет спринг самому создать мой класс Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2016, 16:06 |
|
||
|
Autowired в Spring Boot + Vaadin
|
|||
|---|---|---|---|
|
#18+
kuppidonвот здесь абсолютно согласен и я думал, что объявление бином моего класса CreateHospital как раз это и делает, заставляет спринг самому создать мой класс Не путайте классы и объекты. Вы разницу понимаете? Объект? Экземпляр объекта? kuppidon Код: java 1. 2. 3. 4. Правиильно. Но вы этот объект не используете, вместо него вы создаёте новый Код: java 1. и потом ожидаете что Spring какой-то своей магией должен знать и про этот объект тоже. Он знает про класс. Но про ваш новый объект он не знает ничегошеньки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2016, 16:10 |
|
||
|
Autowired в Spring Boot + Vaadin
|
|||
|---|---|---|---|
|
#18+
ну тогда выходит что выбор у меня не большой (так как автоварка в объекте работать не может, тем более в не спринговском): 1) передавать сваренный сервис в конструктор моего CreateHospital (имею возможность, но не имею желания) 2) уже в самом конструкторе "геттом" с какого-то класса получать сваренный сервис (те же яйца, только в профиль) 3) мой сервис (который надо, что-бы спринг инжектировал) сделать свойством не объекта, а класса (static) и как-то "попросить" спринг инжектировать в него нужный сервис.... тогда при создании объектов моего класса, я могу пользоваться свойствами этого класса (а там уже будет мой сервис) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2016, 16:43 |
|
||
|
Autowired в Spring Boot + Vaadin
|
|||
|---|---|---|---|
|
#18+
kuppidonну тогда выходит что выбор у меня не большой (так как автоварка в объекте работать не может, тем более в не спринговском): 1) передавать сваренный сервис в конструктор моего CreateHospital (имею возможность, но не имею желания) 2) уже в самом конструкторе "геттом" с какого-то класса получать сваренный сервис (те же яйца, только в профиль) 3) мой сервис (который надо, что-бы спринг инжектировал) сделать свойством не объекта, а класса (static) и как-то "попросить" спринг инжектировать в него нужный сервис.... тогда при создании объектов моего класса, я могу пользоваться свойствами этого класса (а там уже будет мой сервис) Определитесь сначала с одном простым вопросом. Кто управляет CreateHospital-ем. Вы или Spring? Ответ на этот вопрос и подскажет решение. Про static забудьте это тупиковый путь и, в аналогичных случаях, ошибочное решение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2016, 16:46 |
|
||
|
Autowired в Spring Boot + Vaadin
|
|||
|---|---|---|---|
|
#18+
BlazkowiczОпределитесь сначала с одном простым вопросом. Кто управляет CreateHospital-ем. Вы или Spring? Ответ на этот вопрос и подскажет решение. Про static забудьте это тупиковый путь и, в аналогичных случаях, ошибочное решение. наверное именно здесь я и "притормаживаю".... насколько я понимаю, то чтобы CreateHospital-ем управлял Spring, он его должен савтоварить (объект)... но (опять таки, насколько я понимаю) автоваренный бин он же синглтон, а у меня количество объектов неограничено. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2016, 16:53 |
|
||
|
Autowired в Spring Boot + Vaadin
|
|||
|---|---|---|---|
|
#18+
kuppidonавтоваренный бин он же синглтон Тут-то и пора начать изучать Scope, о котором я уже 2 раза упоминал выше. http://docs.spring.io/spring/docs/3.0.0.M3/reference/html/ch04s04.html ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2016, 17:27 |
|
||
|
Autowired в Spring Boot + Vaadin
|
|||
|---|---|---|---|
|
#18+
все получилось :) Спасибо что направили на "путь истины" (и за терпение)... все оказалось значительно проще.... Когда я объявлял свой CreateHospital как бин для спринга, то надо было и получать его как бин из контекста (applicationContext.getBean("hospitalBeanSpring")), а не создавать конструктором... еще раз спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2016, 14:18 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=39345057&tid=2123505]: |
0ms |
get settings: |
10ms |
get forum list: |
17ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
48ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
64ms |
get tp. blocked users: |
2ms |
| others: | 230ms |
| total: | 392ms |

| 0 / 0 |
