跳到主要内容
版本:7.0.3

声明

Hunyuan 7b 中英对照 Declaration

你可以通过在Servlet的WebApplicationContext中使用标准的Spring Bean定义来定义控制器bean。@Controller这个注解允许自动检测,这与Spring对类路径中@Component类的自动检测及其Bean定义的自动注册是一致的。它同时也作为被标注类的一个标识,表明其作为Web组件的角色。

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

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

// ...
}

@RestController 是一个组合注解,它本身被 @Controller@ResponseBody 元注解所标记,表示这个控制器中的每个方法都会继承类型级别的 @ResponseBody 注解,因此方法会直接写入响应体中,而不是通过视图解析和使用 HTML 模板来进行渲染。

AOP 代理

在某些情况下,你可能需要在运行时为控制器添加AOP代理。一个例子是,如果你选择在控制器上直接使用@Transactional注解。在这种情况下,对于控制器而言,我们建议使用基于类的代理机制。当这类注解直接应用于控制器时,系统会自动采用这种方式。

如果控制器实现了某个接口,并且需要AOP代理,那么你可能需要显式配置基于类的代理。例如,使用@EnableTransactionManagement时,你可以改为@EnableTransactionManagement(proxyTargetClass = true);而使用<tx:annotation-driven/>时,你可以改为<tx:annotation-driven proxy-target-class="true"/>

备注

请注意,从Spring MVC 6.0开始,由于引入了接口代理机制,Spring MVC不再仅根据接口上@RequestMapping注解的类型来检测控制器。请启用基于类的代理机制,否则该接口还必须带有@Controller注解。