跳到主要内容
版本:7.0.3

@Controller

Hunyuan 7b 中英对照 @Controller @Controller

你可以使用标准的Spring bean定义来定义控制器bean。@Controller这个注解可以实现自动检测,与Spring对类路径中@Component类的自动检测以及为这些类自动注册bean定义的支持是一致的。同时,它也作为被标注类的注解类型,表明了该类作为Web组件的角色。

要启用对此类 @Controller bean 的自动检测,你可以在 Java 配置中添加组件扫描,如下例所示:

@Configuration
@ComponentScan("org.example.web") 1
public class WebConfiguration {

// ...
}
  • 扫描 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注解。