声明
您可以使用 Servlet WebApplicationContext
中的标准 Spring bean 定义来定义控制器 bean。
@Controller
注解允许自动检测,与 Spring 对类路径中 @Component
类的检测和自动注册其 bean 定义的通用支持保持一致。
它还充当被注解类的构造型,指示其作为 Web 组件的角色。
要启用此类 @Controller
bean 的自动检测,您可以在 Java 配置中添加组件扫描,如以下示例所示:
include-code::./WebConfiguration[tag=snippet,indent=0]
@RestController
是一个 组合注解,它本身被 @Controller
和 @ResponseBody
元注解,
表示一个控制器,其每个方法都继承了类型级别的 @ResponseBody
注解,因此直接写入响应体,而不是通过视图解析和 HTML 模板渲染。
AOP 代理
在某些情况下,您可能需要在运行时使用 AOP 代理来装饰控制器。
一个例子是如果您选择直接在控制器上使用 @Transactional
注解。
在这种情况下,对于控制器,我们特别建议使用基于类的代理。
对于直接在控制器上的此类注解,这会自动生效。
如果控制器实现了接口,并且需要 AOP 代理,您可能需要显式配置基于类的代理。
例如,使用 @EnableTransactionManagement
,您可以更改为 @EnableTransactionManagement(proxyTargetClass = true)
,
使用 <tx:annotation-driven/>
,您可以更改为 <tx:annotation-driven proxy-target-class="true"/>
。
请记住,从 6.0 开始,在使用接口代理时,Spring MVC 不再仅仅根据接口上的类型级别 |