Spring MVC中的@Named注释
在Spring 3文档的IoC容器中,@Named注释是与注释等效的标准@Component。
由于@Repository,@Service和@Controller都是全部@Component,因此我尝试@Named在Spring
MVC应用程序中全部使用它们。工作正常。但是我发现替换@Controller似乎有一个错误。在控制器类中,最初是
@Controllerpublic class MyController{
...
}
工作正常。当我改变@Controller为@Named
@Namedpublic class MyController{
...
}
失败并出现错误:
“未找到带有URI的HTTP请求的映射。”。
但是如果我@RequestMapping按照以下方式添加到班级中
@Named@RequestMapping
public class MyController{
...
}
它会按预期工作。
对于@Repository和@Service,我可以毫无问题地替换它们@Named。但是更换@Controller需要额外的工作。我在配置中缺少什么吗?
回答:
@Named与相同@Component。但是,注释@Controller,@Service和@Repository更具体。
从Spring 文档中:
@Component是任何Spring托管组件的通用构造型。
@Repository,@Service和@Controller分别是@Component针对特定用例的专门化,例如分别在持久性,服务和表示层。
例如,这些构造型注释成为切入点的理想目标。这也有可能是
@Repository,@Service和@Controller可以携带SpringFramework的未来版本中为更多的语义。因此,如果您在使用
@Component还是
@Service在服务层之间进行选择,@Service显然是更好的选择。同样,如上所述,@Repository在持久层中已经支持将其作为自动异常转换的标记。
本节说明与的区别@Named。
许多组件,如Spring的DispatcherServlet(在MVC配置WebApplicationContext)不找Component,他们正在寻找@Controller。因此,当它扫描您的课程时,不会在中找到它@Named。以类似的方式,带有的事务管理会@Transactional寻找@Service和@Repository,而不是寻找更通用的@Component。
以上是 Spring MVC中的@Named注释 的全部内容, 来源链接: utcz.com/qa/434878.html
