Java @springmvc中的命名注释

Java @springmvc中的命名注释,java,spring-mvc,annotations,jsr330,Java,Spring Mvc,Annotations,Jsr330,根据Spring3文档,@命名的注释是与@组件注释等效的标准 由于@Repository、@Service和@Controller都是@Component,我试图在我的Spring MVC应用程序中为所有这些组件使用@Named。它很好用。但是我发现更换的@Controller似乎有一个bug。在控制器类中,最初是 @Controller public class MyController{ ... } 它很好用。当我将@Controller更改为@Named @Named publi

根据Spring3文档,
@命名的
注释是与
@组件
注释等效的标准

由于
@Repository
@Service
@Controller
都是
@Component
,我试图在我的Spring MVC应用程序中为所有这些组件使用
@Named
。它很好用。但是我发现更换的
@Controller
似乎有一个bug。在控制器类中,最初是

@Controller
public class MyController{
    ...
}
它很好用。当我将
@Controller
更改为
@Named

@Named
public class MyController{
    ...
}
失败,错误为:

“找不到URI为的HTTP请求的映射…”

但是如果我将
@RequestMapping
添加到类中,如下所示

@Named
@RequestMapping
public class MyController{
     ...
 }
它会像预期的那样工作


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

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

从春天开始:

@Component
是任何Spring托管组件的通用原型。
@Repository
@Service
@Controller
@Component
了解更具体的用例,例如 分别是持久性层、服务层和表示层

例如,这些原型注释是 切入点。也可能是
@存储库
@服务
,以及
@Controller
在未来的 Spring框架。因此,如果您选择使用
@组件
或者
@Service
对于您的服务层,
@Service
显然更好 选择。类似地,如上所述,
@Repository
已经得到支持 作为持久化中自动异常转换的标记 层

第节解释了与
@Named
的区别


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

所有
@Repository
@Service
@Controller
主要用于声明SpringBeans,除此之外,它还向Spring提供了关于类bean控制器、dao等类型的额外信息

这是否意味着我可以安全地使用
@Named
替换
@Component
进行普通bean注入,但我仍然需要使用
@Repository
@Service
,和
@Controller
在Spring MVC中的特定功能?@dino欢迎您。考虑接受这个答案,除非你想等待更多的答案与其他细节。