|
|
|
пытаюсь разобраться с @autowired
|
|||
|---|---|---|---|
|
#18+
Читаю разные статьи. вот наверное лучшая, что я видел. http://javapostsforlearning.blogspot.ru/2012/09/autowired-annotation-in-spring.html везде в вызывающем коде используется getBean() В рабочем проекте нашёл пример @autowired, но нигде не делается getBean() require = false тоже нигде не стоит. Это нормально? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2013, 19:05:25 |
|
||
|
пытаюсь разобраться с @autowired
|
|||
|---|---|---|---|
|
#18+
Очень_Любопытный, да, это нормально. гетер не обязателен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2013, 19:13:34 |
|
||
|
пытаюсь разобраться с @autowired
|
|||
|---|---|---|---|
|
#18+
eledev, а как тогда он понимает какой бин дергать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2013, 19:21:39 |
|
||
|
пытаюсь разобраться с @autowired
|
|||
|---|---|---|---|
|
#18+
Очень_Любопытный, В статье - примеры для запуска из public static void main. В жизни - большинство проектов .war модули и входной точкой является Servlet или ContextListener прописаный в web.xml. Повсеместное использование getBean это ошибка. Такой подход называется Service Locator и существовал в J2EE ещё за долго до Spring. Он нужет там где Dependency Injection работать не будет. Dependency Injection обладает рядом преимущество по стравнению с Service Locator, поэтому его стоит использовать максимально. У того же Фаулера есть хорошая статья по этой теме. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2013, 19:43:47 |
|
||
|
пытаюсь разобраться с @autowired
|
|||
|---|---|---|---|
|
#18+
Есть вообще место, где написано Код: java 1. 2. а CandidateDao вообще среди объявленных бинов отсутствует. как это работает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2013, 19:44:34 |
|
||
|
пытаюсь разобраться с @autowired
|
|||
|---|---|---|---|
|
#18+
BlazkowiczОчень_Любопытный, В статье - примеры для запуска из public static void main. В жизни - большинство проектов .war модули и входной точкой является Servlet или ContextListener прописаный в web.xml. Повсеместное использование getBean это ошибка. Такой подход называется Service Locator и существовал в J2EE ещё за долго до Spring. Он нужет там где Dependency Injection работать не будет. Dependency Injection обладает рядом преимущество по стравнению с Service Locator, поэтому его стоит использовать максимально. У того же Фаулера есть хорошая статья по этой теме. очень интересно. у меня вот такой web.xml Код: 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. а что конкретно получается, если не делается getBean ? просто вызывается конструктор? если так, то зачем тогда нужен Код: java 1. ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2013, 19:49:32 |
|
||
|
пытаюсь разобраться с @autowired
|
|||
|---|---|---|---|
|
#18+
Очень_Любопытныйа CandidateDao вообще среди объявленных бинов отсутствует. как это работает? Что такое "объявленые бины"? Класс CandidateDao помечен некоторой аннотацией. Spring сканирует классы и регистрирует бины в своём контексте, если они помечены соответствующими аннотациями. Постарайтесь сформулировать свой вопрос более конкретно. Тогда вы на него сможете получить детальный ответ. Сейчас трудно угадать что именно у вас вызывает недопонимание. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2013, 20:00:33 |
|
||
|
пытаюсь разобраться с @autowired
|
|||
|---|---|---|---|
|
#18+
Очень_Любопытныйу меня вот такой web.xml Код: xml 1. 2. JEE контейнер созаёт экземпляр вышеуказанного класса. Тот создаёт Spring Application Context, используя вышеуказаный конфиг. Конфиги вида /WEB-INF/*-servlet.xml спринг, вроде вообще сам умеет находить, их в web.xml писать не обязательно. Очень_Любопытныйа что конкретно получается, если не делается getBean ? Где делается? Зачем делается? Очень_Любопытныйпросто вызывается конструктор? если так, то зачем тогда нужен Код: java 1. ? Предлагается прочитать всю статью чтобы понять что вы имеете ввиду? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2013, 20:03:58 |
|
||
|
пытаюсь разобраться с @autowired
|
|||
|---|---|---|---|
|
#18+
BlazkowiczОчень_Любопытныйа CandidateDao вообще среди объявленных бинов отсутствует. как это работает? Что такое "объявленые бины"? Класс CandidateDao помечен некоторой аннотацией. Spring сканирует классы и регистрирует бины в своём контексте, если они помечены соответствующими аннотациями. Постарайтесь сформулировать свой вопрос более конкретно. Тогда вы на него сможете получить детальный ответ. Сейчас трудно угадать что именно у вас вызывает недопонимание. под объявленными бинами я имел ввиду бины из xml. например: Код: xml 1. 2. 3. 4. 5. 6. авторКласс CandidateDao помечен некоторой аннотацией Вы правы. аннотацией @Repository. авторавтора что конкретно получается, если не делается getBean ? Где делается? Зачем делается? Как я понимаю, если я вызываю getBean(), то из контекста берется бин(если он уже существует, если нет, то ещё и конструируется) и мне передаётся ссылка на него(что-то типа синглтона). причем берется по id. В том случае если getBean() явно не вызывается, то как Spring понимает какой бин взять? просто вызывает конструктор, кладет объект в контекст и при следующей просьбе выдать объект выдаст его же??? про required=false: автор Конструкция require=false сообщает фреймворку о том, что наличие соответствующего bean'а не является обязательным при компиляции программы. Пример: Код: java 1. 2. то есть тут я так понял вызовется просто конструктор бина и объект выдастся именно такой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2013, 21:13:59 |
|
||
|
пытаюсь разобраться с @autowired
|
|||
|---|---|---|---|
|
#18+
Очень_Любопытныйпод объявленными бинами я имел ввиду бины из xml. Это конфигурация для Spring IoC. Она может быть в xml и аннотациях. Смешивать можно, но крайне не желательно. Очень_ЛюбопытныйКак я понимаю, если я вызываю getBean(), то из контекста берется бин(если он уже существует, если нет, то ещё и конструируется) и мне передаётся ссылка на него(что-то типа синглтона). Грубо-говоря - да. Но есть нюансы. Во-первых есть scope, который по-умолчанию singleton. Во-вторых есть параметр lazy. В-третих создаётся не обязательно через конструктор. Очень_Любопытныйпричем берется по id. Да. Очень_ЛюбопытныйВ том случае если getBean() явно не вызывается, то как Spring понимает какой бин взять? В случае аннотаций, там есть ряд правил описаных в мануле. И по имени класса и по имени поля пытается найти самый подходящий. Очень_Любопытныйпросто вызывает конструктор, кладет объект в контекст и при следующей просьбе выдать объект выдаст его же??? Да автор Конструкция require=false сообщает фреймворку о том, что наличие соответствующего bean'а не является обязательным при компиляции программы. Статья "блещет", конечно. На этапе компиляции никакого контейнера нет, поэтому проверок никаких не будет. Мне в мануал уже лень смотреть. А вы могли бы. На сколько я догадываюсь, что когда контейнер будет создавать текущий бин, при required=false у свойства будет просто null. А при required=true контейнер выкинет исключение, что не найдена зависимость. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2013, 21:51:59 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=38339760&tid=2128944]: |
0ms |
get settings: |
16ms |
get forum list: |
26ms |
check forum access: |
7ms |
check topic access: |
7ms |
track hit: |
83ms |
get topic data: |
24ms |
get forum data: |
6ms |
get page messages: |
96ms |
get tp. blocked users: |
3ms |
| others: | 327ms |
| total: | 595ms |

| 0 / 0 |
