|
|
|
spring mvc. Вопросы по контроллерам.
|
|||
|---|---|---|---|
|
#18+
Коллеги, Я вот пару дней назад начал изучать spring mvc ибо сил моих больше нету фигачить HttpServlet. 1) Хочется странного. Чтобы контроллер возвращал модель не в JSP, а в сервлет. А сервлет уже отдавался вопрошающему. 2) Я не до конца понимаю логику контроллеров и вопрос сформулирую с примером: Код: 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. 2a) Не могу понять зачем в контроллерах и кто вызывает сеттеры, в данном случаи это метод setUserService? 2b) И что за параметры\объекты в эти сеттеры передаются? 2c) А так же не понимаю как именуются методы showUserForm и onSubmit (почему именно с такими именами)? 2d) А так же какие именно объекты в эти методы передаются? Такое ощущение, что именование идёт какое то рандомное, и передача параметров в методы какое то тоже с потолка. Заранее спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2012, 03:32:02 |
|
||
|
spring mvc. Вопросы по контроллерам.
|
|||
|---|---|---|---|
|
#18+
1. Каждый сервлет вызывается по определенному меппингу. Редиректь по известному меппингу (или форвардь, в зависимости от надобности). 2а. Это не только в контроллерах. Это азы самого Spring'а - IoC/DI. В зависимости от видимости Спринг инжектит в бин параметры. В данном случае типа UserService. У тебя это в конфиге это может быть описано так (хотя не обязательно, так как @Autowired прописан): <bean id="userService" class="com.yourpackage.UserService"/> <bean id="userController" class="com.yourpackage.UserController" autowire="byType"> <property name="userService" ref="userService"/> </bean> 2b. Все в 2а. 2с. Практически совершенно по барабану. Назови хоть vizvatEtotMetodVSluchaeMappingaSImenemUserRegistration(pars). 2d. Близко. Есть набор параметров (с/без аннотациями), которые можно получить. Можно получаемые параметры, а можно и более традиционно - request и response. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2012, 04:02:24 |
|
||
|
spring mvc. Вопросы по контроллерам.
|
|||
|---|---|---|---|
|
#18+
Пасибо, большое. Почти полностью понял Ваш ответ. Кроме пункта 2а. У меня в конфига ни слова ни о бинах ни о контроллерах(всё аннотациями делаю). Контроллер у меня даже в конфигах tomcat'а нигде не описан. А где можно почитать про азы Spring'а - IoC/DI, точнее именно про это связывание? А то я много чего читал про Спринг последствии пару дней, но что то этот момент упустил. В общем не понимаю как Спринг инжектит в бины\контролеры. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2012, 13:35:32 |
|
||
|
spring mvc. Вопросы по контроллерам.
|
|||
|---|---|---|---|
|
#18+
tepkaПасибо, большое. Почти полностью понял Ваш ответ. Кроме пункта 2а. У меня в конфига ни слова ни о бинах ни о контроллерах(всё аннотациями делаю). Контроллер у меня даже в конфигах tomcat'а нигде не описан. А где можно почитать про азы Spring'а - IoC/DI, точнее именно про это связывание? А то я много чего читал про Спринг последствии пару дней, но что то этот момент упустил. В общем не понимаю как Спринг инжектит в бины\контролеры. Именно потому что всё на аннотациях, то IoC понятно сложнее. Тут ведь нет никаких id, и видимых зависимостей, в отличие от XML. Спринг сканирует классы. Находит @Controller - создаёт через рефлексию новый экземпляр. Запоминает его у себя в контексте и назначает ему ID. Сканирует Autowired - находит в контексте подходящие зависимости по id/классу и сетит значения через ту же рефлексию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2012, 13:48:17 |
|
||
|
spring mvc. Вопросы по контроллерам.
|
|||
|---|---|---|---|
|
#18+
BlazkowiczСпринг сканирует классы. Находит @Controller - создаёт через рефлексию новый экземпляр. Запоминает его у себя в контексте и назначает ему ID. Сканирует Autowired - находит в контексте подходящие зависимости по id/классу и сетит значения через ту же рефлексию. Да я примерно (только в голове, без конкретной практики) понимаю как происходит сеттинг бинов. Мне не понятно зачем нужна эта самая инъекция зависимостей. Почему я не мог сделать вот так? Код: java 1. 2. 3. 4. 5. 6. 7. 8. Зачем мне его через сеттер то получать? Какие мне это профиты то даёт. А я как минимум вижу с ходу проблему, эт когда несколько бинов с типом UserService. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2012, 14:50:04 |
|
||
|
spring mvc. Вопросы по контроллерам.
|
|||
|---|---|---|---|
|
#18+
tepkaПочему я не мог сделать вот так? Можете. Вопрос в том к каким это проблемам приведёт в дальнейшей перспективе развития проекта. 1) Экземпляр userServiceImpl каждый раз новый и его нельзя проинициализировать один раз на все случаи. Можно проинициализировать в статике, но статика не обладает полиморфизмом. 2) Контроллер строго привязывается к userServiceImpl. Соответственно чтобы заменить реализацию на LdapUserServiceImpl или DBUserServiceImpl, нужно перелопачивать весь код. 3) И не дай бог в разных ситуациях нужны будут разные реализации UserService. 4) А что если реализация UserService будет находится на другой удаленной JVM? 5) Есть такой подход - Single Responsibility Principle. Ему проще следовать с IoC, чем с вашим вариантом. В вашем варианте у контроллера кроме роли обработки запросов появляется ещё другая роль - управлять жизненым циклом userServiceImpl. Spring забирает управление жизненым циклом на себя, поэтому конкретные классы уже заботятся только о своей конкретной роли. tepkaЗачем мне его через сеттер то получать? Какие мне это профиты то даёт. А я как минимум вижу с ходу проблему, эт когда несколько бинов с типом UserService. Каждый проект является потенциально большим и потенциально долго живущим. Поэтому последние 10-20 лет индустрия усиленно ищет подходы к тому чтобы проект был всегда готов к любым изменениям. Потому что написать полноценное ТЗ покрывающее 100% всех случаев так же сложно как реализовать сам проект. Поэтому и код и процесс разработки должны быть такими, что любые изменения в ТЗ минимально отразятся на изменениях в коде. IoC это одно из таких стредств. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2012, 15:05:05 |
|
||
|
|

start [/forum/topic.php?fid=59&fpage=289&tid=2131773]: |
0ms |
get settings: |
13ms |
get forum list: |
23ms |
check forum access: |
6ms |
check topic access: |
6ms |
track hit: |
34ms |
get topic data: |
13ms |
get forum data: |
4ms |
get page messages: |
98ms |
get tp. blocked users: |
2ms |
| others: | 362ms |
| total: | 561ms |

| 0 / 0 |
