|
对于最新的稳定版本,请使用 Spring Framework 7.0.6! |
@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注解。 |