春季 MVC 中的@Named注释

2022-09-02 03:35:13

根据 Spring 3 文档 IoC 容器,注释是与注释等效的标准。@Named@Component

由于 、 和 都是 ,我试图在我的 Spring MVC 应用程序中使用它们。它工作正常。但是我发现替换似乎有一个错误。在控制器类中,最初,它是@Repository@Service@Controller@Component@Named@Controller

@Controller
public class MyController{
    ...
}

它工作正常。当我更改为@Controller@Named

@Named
public class MyController{
    ...
}

它失败,错误如下:

“未找到具有 URI 的 HTTP 请求的映射...”。

但是,如果我按如下方式添加到类中@RequestMapping

@Named
@RequestMapping
public class MyController{
     ...
 }

它将按预期工作。

对于和,我可以简单地替换它们,没有问题。但更换需要额外的工作。配置中是否缺少任何内容?@Repository@Service@Named@Controller


答案 1

@Named工作原理与 相同。但是,注释 、 和 更具体。@Component@Controller@Service@Repository

来自春季文档

@Component是任何 Spring 管理的组件的通用构造型。、和 是更具体用例的专用化,例如,分别在持久性层、服务和表示层中。@Repository@Service@Controller@Component

例如,这些构造型批注是切入点的理想目标。也有可能 ,,并可能在 Spring 框架的未来版本中携带额外的语义。因此,如果您在使用服务图层或用于服务图层之间进行选择,显然是更好的选择。同样,如上所述,已经支持将其作为持久性层中自动异常转换的标记。@Repository@Service@Controller@Component@Service@Service@Repository

本节介绍 与 的区别。@Named

许多组件,如Spring的(MVC配置)不是在寻找,他们正在寻找。因此,当它扫描您的类时,它不会在 中找到它。以类似的方式,事务管理与查找 和 ,而不是更通用的 。DispatcherServletWebApplicationContextComponent@Controller@Named@Transactional@Service@Repository@Component


答案 2

所有,并且主要用于声明Spring豆,除此之外,它还为Spring提供了有关豆类类型的额外信息,例如控制器,道等@Repository@Service@Controller


推荐