powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / spring mvc. Вопросы по контроллерам.
7 сообщений из 7, страница 1 из 1
spring mvc. Вопросы по контроллерам.
    #37798072
tepka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Коллеги,
Я вот пару дней назад начал изучать 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.
package firststeps.spring.web;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.SessionAttributes;
import firststeps.spring.domain.User;
import firststeps.spring.service.UserService;
@Controller
@RequestMapping("/userRegistration.htm")
@SessionAttributes("user")
public class UserController {
	private UserService userService;
	@Autowired
	public void setUserService(UserService userService) {
		this.userService = userService;
	}
	@RequestMapping(method = RequestMethod.GET)
	public String showUserForm(ModelMap model) {
		User user = new User();
		model.addAttribute(user);
		return "userForm";
	}
	@RequestMapping(method = RequestMethod.POST)
	public String onSubmit(@ModelAttribute("user") User user) {
		userService.add(user);
		return "redirect:userSuccess.htm";
	}
}



2a) Не могу понять зачем в контроллерах и кто вызывает сеттеры, в данном случаи это метод setUserService?
2b) И что за параметры\объекты в эти сеттеры передаются?
2c) А так же не понимаю как именуются методы showUserForm и onSubmit (почему именно с такими именами)?
2d) А так же какие именно объекты в эти методы передаются? Такое ощущение, что именование идёт какое то рандомное, и передача параметров в методы какое то тоже с потолка.

Заранее спасибо.
...
Рейтинг: 0 / 0
spring mvc. Вопросы по контроллерам.
    #37798075
IDVsbruck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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.
...
Рейтинг: 0 / 0
spring mvc. Вопросы по контроллерам.
    #37798850
tepka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пасибо, большое. Почти полностью понял Ваш ответ. Кроме пункта 2а.
У меня в конфига ни слова ни о бинах ни о контроллерах(всё аннотациями делаю). Контроллер у меня даже в конфигах tomcat'а нигде не описан.
А где можно почитать про азы Spring'а - IoC/DI, точнее именно про это связывание? А то я много чего читал про Спринг последствии пару дней, но что то этот момент упустил. В общем не понимаю как Спринг инжектит в бины\контролеры.
...
Рейтинг: 0 / 0
spring mvc. Вопросы по контроллерам.
    #37798891
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tepkaПасибо, большое. Почти полностью понял Ваш ответ. Кроме пункта 2а.
У меня в конфига ни слова ни о бинах ни о контроллерах(всё аннотациями делаю). Контроллер у меня даже в конфигах tomcat'а нигде не описан.
А где можно почитать про азы Spring'а - IoC/DI, точнее именно про это связывание? А то я много чего читал про Спринг последствии пару дней, но что то этот момент упустил. В общем не понимаю как Спринг инжектит в бины\контролеры.
Именно потому что всё на аннотациях, то IoC понятно сложнее. Тут ведь нет никаких id, и видимых зависимостей, в отличие от XML.

Спринг сканирует классы. Находит @Controller - создаёт через рефлексию новый экземпляр. Запоминает его у себя в контексте и назначает ему ID.
Сканирует Autowired - находит в контексте подходящие зависимости по id/классу и сетит значения через ту же рефлексию.
...
Рейтинг: 0 / 0
spring mvc. Вопросы по контроллерам.
    #37799085
tepka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BlazkowiczСпринг сканирует классы. Находит @Controller - создаёт через рефлексию новый экземпляр. Запоминает его у себя в контексте и назначает ему ID.
Сканирует Autowired - находит в контексте подходящие зависимости по id/классу и сетит значения через ту же рефлексию.
Да я примерно (только в голове, без конкретной практики) понимаю как происходит сеттинг бинов.
Мне не понятно зачем нужна эта самая инъекция зависимостей.

Почему я не мог сделать вот так?
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
...
@RequestMapping(method = RequestMethod.POST)
	public String onSubmit(@ModelAttribute("user") User user) {
                UserService userService = new userServiceImpl();
		userService.add(user);
		return "redirect:userSuccess.htm";
	}
...


Зачем мне его через сеттер то получать? Какие мне это профиты то даёт.
А я как минимум вижу с ходу проблему, эт когда несколько бинов с типом UserService.
...
Рейтинг: 0 / 0
spring mvc. Вопросы по контроллерам.
    #37799139
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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 это одно из таких стредств.
...
Рейтинг: 0 / 0
spring mvc. Вопросы по контроллерам.
    #37799178
tepka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
фух, вроде бы понял. Спасибо ВАМ БОЛЬШОЕ!.
Пойду, что нить лобать тестово-обучающее.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / spring mvc. Вопросы по контроллерам.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]