@Controller
您可以通过使用标准的 Spring bean 定义来定义控制器 bean。
@Controller
构造型允许自动检测,并与 Spring
在类路径中检测 @Component
类并为其自动注册 bean 定义的通用支持保持一致。
它还充当带注解类的构造型,指示其作为 Web 组件的角色。
要启用此类 @Controller
bean 的自动检测,您可以在 Java 配置中添加组件扫描,
如以下示例所示:
- Java
-
@Configuration @ComponentScan("org.example.web") [id="CO1-1"][id="CO1-1"][id="CO1-1"](1) public class WebConfiguration { // ... }
<1> 扫描 `org.example.web` 包。
- Kotlin
-
@Configuration @ComponentScan("org.example.web") [id="CO2-1"][id="CO1-2"][id="CO2-1"](1) class WebConfiguration { // ... }
<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 不再
仅仅根据接口上类型级别的 |