Spring framework. Контроллеры и аннотации.
В статье "Приложение на Spring..." была создана программа, с одним контроллером, который отдавал простую html страницу. Этот контроллер являлся потомком AbstractController, и должен был реализовывать методы родительского класса. Также он должен был быть прописан в dispatcher-servlet.xml.
С версии 2.5 spring framework предоставляет возможность конфигурирования компонентов mvc с помощью аннотаций. Благодаря этому значительно уменьшается количество конфигурационной информации в XML-файлах. Для использования этой возможности, в dispatcher-servlet.xml необходимо включить бин:
-
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"/>
Класс контроллера должен быть помечен аннотацией @Contrller. Для того, чтобы spring определял такие контроллеры, необходимо включить соответствующую функцию. Для этого, в dispatcher-servlet.xml добавим строку:
-
<context:component-scan base-package="ru.vaniashev.controllers"/>
Где base-package - пакет, в котором находятся контроллеры.
Теперь осталось изменить код HelloController:
-
package ru.vaniashev.controllers;
-
-
import java.util.Properties;
-
-
import org.springframework.beans.factory.annotation.Autowired;
-
import org.springframework.stereotype.Controller;
-
import org.springframework.web.bind.annotation.RequestMapping;
-
import org.springframework.web.servlet.ModelAndView;
-
-
@Controller
-
public class HelloController {
-
-
private Properties properties;
-
-
@Autowired
-
this.properties = properties;
-
}
-
-
@RequestMapping("/hello.html")
-
protected ModelAndView hello(){
-
return new ModelAndView("hello", "message", "Hello, world!");
-
}
-
-
}
У контроллера обязательно должен быть конструктор, принимающий хотя бы один аргумент. В данном случае, в него передается бин properties, прописанный в dispatcher-servlet.xml. Метод hello() выполняет те же действия, что и метод HandleRequestInternal(...) из предыдущего примера. Кроме того, метод hello() может принимать и возвращать различные виды объектов. Подробнее об этом написано здесь.
Код dispatcher-servlet тоже изменлся:
-
<?xml version="1.0" encoding="UTF-8"?>
-
<beans xmlns="http://www.springframework.org/schema/beans"
-
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-
xmlns:p="http://www.springframework.org/schema/p"
-
xmlns:context="http://www.springframework.org/schema/context"
-
xsi:schemaLocation="
-
http://www.springframework.org/schema/beans
-
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
-
http://www.springframework.org/schema/context
-
http://www.springframework.org/schema/context/spring-context-2.5.xsd" default-lazy-init="false" default-init-method="init">
-
-
<bean
-
class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" />
-
-
<bean id="properties" class="java.util.Properties"/>
-
-
<context:component-scan base-package="ru.vaniashev.controllers" />
-
-
<bean id="viewResolver"
-
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
-
<property name="prefix" value="/WEB-INF/jsp/" />
-
<property name="suffix" value=".jsp" />
-
</bean>
-
</beans>
Обратите внимание на то, что для работы приложения необходимо установить атрибут тэга <beans/> default-init-method="init"
Для быстрого запуска приложения можно использовать maven-jetty-plugin

14 Июль 2008 в 10:08 дп
[...] Разработка web-приложений Блог о разработке приложений для интернета « Spring framework. Контроллеры и аннотации. [...]
15 Окт 2008 в 8:36 пп
[...] предидущих статьях мы разбирались с описанием контроллеров с помощью [...]