Spring MVC 中的 @Named 注解

@Named annotation in Spring MVC(Spring MVC 中的 @Named 注解)
本文介绍了Spring MVC 中的 @Named 注解的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

问题描述

根据 Spring 3 文档,IoC容器,@Named注解是标准等价于@Component注解.

Per Spring 3 document, The IoC container, the @Named annotation is a standard equivalent to the @Component annotation.

由于@Repository@Service@Controller都是@Component,所以我尝试使用@Named 用于我的 Spring MVC 应用程序中的所有这些.它工作正常.但我发现 @Controller 的替换似乎有一个错误.在控制器类中,原来是

Since @Repository, @Service, and @Controller are all @Component, I tried to used @Named for all of them in my Spring MVC application. It works fine. But I found the replacement of @Controller seems to have a bug. In the controller class, originally, it was

@Controller
public class MyController{
    ...
}

它工作正常.当我将 @Controller 更改为 @Named

It works fine. When I changed @Controller to @Named

@Named
public class MyController{
    ...
}

失败并出现错误:

没有为带有 URI ... 的 HTTP 请求找到映射".

"No mapping found for HTTP request with URI ...".

但是如果我将 @RequestMapping 添加到类中,如下所示

But if I added @RequestMapping to the class as follow

@Named
@RequestMapping
public class MyController{
     ...
 }

它会按预期工作.

对于 @Repository@Service,我可以简单地用 @Named 替换它们,没有任何问题.但是 @Controller 的替换需要额外的工作.配置中有什么我遗漏的吗?

For @Repository and @Service, I can simply replace them with @Named with no issue. But the replacement of @Controller needs extra work. Is there anything I am missing in the configuration?

推荐答案

@Named@Component 的作用相同.但是,注释 @Controller@Service@Repository 更具体.

@Named works the same as @Component. However, the annotations @Controller, @Service, and @Repository are more specific.

来自 Spring 文档:

From the Spring docs:

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

@Component is a generic stereotype for any Spring-managed component. @Repository, @Service, and @Controller are specializations of @Component for more specific use cases, for example, in the persistence, service, and presentation layers, respectively.

例如,这些原型注释是理想的目标切入点.@Repository@Service@Controller 可能会在未来版本的春天框架.因此,如果您在使用 @Component 之间进行选择或 @Service 为您的服务层,@Service 显然更好选择.同样,如上所述,@Repository 已经被支持作为持久性中自动异常翻译的标记层.

For example, these stereotype annotations make ideal targets for pointcuts. It is also possible that @Repository, @Service, and @Controller may carry additional semantics in future releases of the Spring Framework. Thus, if you are choosing between using @Component or @Service for your service layer, @Service is clearly the better choice. Similarly, as stated above, @Repository is already supported as a marker for automatic exception translation in your persistence layer.

本部分解释了与 @Named 的区别.

This section explains the difference with @Named.

许多组件,例如 Spring 的 DispatcherServlet(WebApplicationContext 中的 MVC 配置)不是在寻找 Component,而是在寻找 @控制器.所以当它扫描你的类时,它不会在 @Named 中找到它.以类似的方式,使用 @Transactional 的事务管理查找 @Service@Repository,而不是更通用的 @Component.

Many components, like Spring's DispatcherServlet (MVC configuration in WebApplicationContext) aren't looking for Component, they are looking for @Controller. So when it scans your class, it won't find it in @Named. In a similar fashion, transaction management with @Transactional looks for @Service and @Repository, not for the more generic @Component.

这篇关于Spring MVC 中的 @Named 注解的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

本站部分内容来源互联网,如果有图片或者内容侵犯了您的权益,请联系我们,我们会在确认后第一时间进行删除!

相关文档推荐

How to send data to COM PORT using JAVA?(如何使用 JAVA 向 COM PORT 发送数据?)
How to make a report page direction to change to quot;rtlquot;?(如何使报表页面方向更改为“rtl?)
Use cyrillic .properties file in eclipse project(在 Eclipse 项目中使用西里尔文 .properties 文件)
Is there any way to detect an RTL language in Java?(有没有办法在 Java 中检测 RTL 语言?)
How to load resource bundle messages from DB in Java?(如何在 Java 中从 DB 加载资源包消息?)
How do I change the default locale settings in Java to make them consistent?(如何更改 Java 中的默认语言环境设置以使其保持一致?)