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