Din*_* Tw 15 java annotations spring-mvc jsr330
Per Spring 3文档,IoC容器,@Named注释是与注释等效的标准@Component.
从@Repository,@Service和@Controller,都是@Component,我试图@Named在我的Spring MVC应用程序中使用它们.它工作正常.但我发现替换@Controller似乎有一个bug.在控制器类中,最初是
@Controller
public class MyController{
...
}
Run Code Online (Sandbox Code Playgroud)
它工作正常.当我改变@Controller到@Named
@Named
public class MyController{
...
}
Run Code Online (Sandbox Code Playgroud)
它失败了,错误:
"找不到带URI的HTTP请求的映射......".
但如果我@RequestMapping按照以下方式加入课堂
@Named
@RequestMapping
public class MyController{
...
}
Run Code Online (Sandbox Code Playgroud)
它会按预期工作.
对于@Repository和@Service,我可以简单地替换它们@Named没有问题.但更换@Controller需要额外的工作.我在配置中缺少什么?
Sot*_*lis 20
@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.
| 归档时间: |
|
| 查看次数: |
20922 次 |
| 最近记录: |