Spring Web Application - как перейти от контроллеров страниц к бизнес-уровню - PullRequest
1 голос
/ 21 января 2011

Я пишу веб-приложение Spring в Eclipse. В WEB-INF у меня есть файл web.xml, который дает отображение сервлета для файла myapp-servlet.xml.

В myapp-servlet.xml у меня есть компонент для контроллера страницы. Я предполагаю, что Spring DispatcherServlet создает экземпляры этих компонентов из своего собственного ApplicationContext. Когда я запускаю свой проект в качестве сервера, он отображает файл index.jsp - «привет, привет, привет».

Теперь я также предполагаю, что если бы я поместил кнопку отправки, которая отправляет данные поста в этот файл index.jsp, мой контроллер страницы был бы уведомлен о запросе HTTP. Однако как я могу взаимодействовать с остальной частью моего приложения (бизнес-уровнем) из контроллера страницы? Я пишу приложение LDAP Directory Lookup, и как только пользователь вводит имя, я хочу вернуть электронное письмо , Поэтому, когда пользователь вводит имя и нажимает «Отправить», я хочу связаться с моим бизнес-уровнем LDAP. Как я могу это сделать?

Один из способов сделать это - добавить свои бизнес-объекты в качестве свойств в контроллер страницы в файле myapp-servlet.xml. Однако, мне кажется, что это слишком сильно интегрирует бизнес-уровень и контроллеры - это означает, что каждому контроллеру потребуются свойства для бизнес-объектов.

Другой способ, которым я думал об этом, - создать некую фабрику, которую все контроллеры перечислили как свойство в своем XML. Через эту фабрику контроллеры могут получить доступ к бизнес-объектам; фабрика - это интерфейс между двумя слоями.

Это обе нестандартные идеи, и я подозреваю, что есть готовое решение. Есть ли уже способ пойти по этому поводу? (Интеграция бизнес-уровня со слоем контроллера веб / страниц?) Или программист сам должен придумать собственное решение, как я обрисовал выше?

Спасибо, (и извините за длинный вопрос - отсюда жирный)
КТМ

1 Ответ

3 голосов
/ 21 января 2011

Ваш контроллер должен каким-то образом содержать ссылку на ваши бизнес-объекты.Чтобы в полной мере использовать Spring, вы захотите внедрить эти зависимости в свой контроллер.

Это не жесткая связь, особенно если эти бизнес-объекты реализуют интерфейс, и ваш контроллер будет знать только об этом интерфейсе.

Внедрение зависимостей устраняет необходимость в фабриках, так как вам нужно будет знать об интерфейсах обслуживания с нашими без фабрики:

SomeBusinessServiceInterface service = businessFactory.getBusinessService();

Но подумайте об этом так: вы должны как-то получить справку о некоторыхсервис (используя этот сервисный интерфейс для слабой связи) и, скорее всего, вам нужно его кешировать - сохраните его как переменную экземпляра.Так как у вас все равно это есть, предоставление установщика больше не связывает ваш веб-уровень и бизнес-уровень, чем они уже есть.

Если установщик кажется неестественным (а иногда и таковым), используйте внедрение конструктора для реализации этого как классического ООaggregation.

Что касается конфигурации контекста приложения, Spring позволяет вам определять контекст приложения для всего веб-приложения, определенный с помощью ContextLoaderListener в web.xml.Обычно там должны находиться все определения вашего бизнес-компонента.Ваш прикладной контекст -servlet.xml привязан к сервлету и обычно должен содержать материал MVC, ссылающийся на bean-компоненты в корневом контексте, так как этот контекст автоматически становится родителем всех -servlet.xml (поэтому все bean-компоненты там видимы для вашегосервлеты).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...