Spring MVC中的@Named注释

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

由于@Repository@Service@Controller都是全部@Component,因此我尝试@Named在Spring

MVC应用程序中全部使用它们。工作正常。但是我发现替换@Controller似乎有一个错误。在控制器类中,最初是

@Controller

public class MyController{

...

}

工作正常。当我改变@Controller@Named

@Named

public 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可以携带Spring

Framework的未来版本中为更多的语义。因此,如果您在使用@Component

还是@Service在服务层之间进行选择,@Service显然是更好的选择。同样,如上所述,@Repository在持久层中已经支持将其作为自动异常转换的标记。

本节说明与的区别@Named

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

以上是 Spring MVC中的@Named注释 的全部内容, 来源链接: utcz.com/qa/434878.html

回到顶部