Spring MVC中的@Named注释

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

由于@Repository@Service @Controller@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替换它们,没有问题。 但是@Controller的替换需要额外的工作。 我在配置中缺少什么?

@Named工作方式与@Component相同。 但是,注释@Controller@Service @Controller@Repository更具体。

来自Spring 文档 :

@Component是任何Spring管理组件的通用@Component型。 @Repository@Service @Controller@Controller@Component用于更具体的用例,例如,分别在持久性,服务和表示层中。

例如,这些刻板印象注释成为切入点的理想目标。 在未来的Spring Framework版本中, @Repository@Service @Controller@Controller也可能带有额外的语义。 因此,如果您选择在服务层使用@Component@Service Service, @Service Service显然是更好的选择。 同样,如上所述,已经支持@Repository作为持久层中自动exception转换的标记。

本节介绍与@Named的区别。

许多组件,如Spring的DispatcherServletWebApplicationContext MVC配置)都没有查找Component ,他们正在寻找@Controller 。 所以当它扫描你的课时,它不会在@Named找到它。 以类似的方式,使用@Transactional事务管理查找@Service@Repository ,而不是更通用的@Component

所有@Repository@Service @Controller@Controller主要用于声明Spring bean,除了它为Spring提供有关bean类型的额外信息,如controller,dao等