@Controller
您可以通过使用标准的Spring bean定义来定义控制器bean。 @Controller
注释允许自动检测,并与Spring对在类路径中检测到的 @Component
类的自动注册bean定义的一般支持保持一致。它还作为被注释类的一种类型,指示其作为Web组件的角色。
要启用此类 @Controller
bean 的自动检测,您可以将组件扫描添加到您的Java配置中,如下例所示:
-
Java
-
Kotlin
@Configuration
@ComponentScan("org.example.web") (1)
public class WebConfig {
// ...
}
1 | 扫描 org.example.web 包。 |
@Configuration
@ComponentScan("org.example.web") (1)
class WebConfig {
// ...
}
1 | 扫描 org.example.web 包。 |
@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 WebFlux不再仅基于接口上的类型级别 @RequestMapping 注释来检测控制器。请启用基于类的代理,否则接口还必须具有 @Controller 注释。 |