网上中文资料都说@Resource是byName注入,其实是byType注入。以讹传讹,有时候真的不靠谱啊。
http://www.coderanch.com/t/478706/Spring/Autowired-Qualifier-Resource-annotation
posted Saturday, January 16, 2010 03:28:53
|
@Autowired is Spring's Annotation(only usable in Spring) @Resource is JSR-250 Common Annotation equivalent (works the same in Java EE 5) @Inject is JSR 33? Common Annotation equivalent. (works the same in Java EE 6?)
All three do the same thing. However, @Autowired is the only annotation of the three that you can put on constructors.
Now since auto wiring by default does it by object type. If you have two beans of the same type, then there is ambiguity that Spring can't figure out which of the two beans to inject. That is what @Qualifier is for, to use the bean name to fix the ambiguity and tell Spring which of the two beans to inject. Use @Qualifier with @Autowired. With @Resource and @Inject you can just put the bean name in the annotation as an attribute.
Hope that helps
Mark |
验证了一下,还真是byType注入。
分享到:
相关推荐
`@Resource`默认通过byName策略来查找依赖,即根据Bean的名称进行匹配。例如: ```java public class MyController { @Resource private MyService myService; // ... } ``` 在这个例子中,Spring会查找名为`...
它的使用方式和 @Autowired 完全相同,最大差异于 @Resource 可以支持ByName 和 ByType 两种注入方式。如果使用 name,Spring 就根据 bean 的名字进行依赖注入,如果使用 type,Spring 就根据类型实现依赖注入。如果...
`@Resource`的主要作用是基于名字(byName)进行装配,也就是说,它会寻找匹配的名字来找到相应的bean。 ### `@Resource`注解的基本用法 1. **字段注入**: ```java @Resource private MyService myService; `...
另一方面,`@Resource`注解来自于JSR-250规范,它的主要区别在于默认按名称(byName)进行注入。也就是说,如果在字段或方法上使用`@Resource`,Spring会查找Bean的名字与注解中的`name`属性相匹配。如果`name`属性未...
如果都不指定,则通过反射机制使用byName的方式自动注入。 例如: ```java @Resource(name="userDao") private UserDao userDao; ``` 这段代码表示通过名称装配UserDao的Bean。 4. @PostConstruct注解 @...
既无name也无type,尝试byName注入,无匹配则尝试原始类型匹配。 4. **@PostConstruct注解**:此注解用于标记在Bean初始化后由Spring容器执行的方法,通常是在依赖注入完成后调用。这对于初始化一些特殊资源或执行...
@Autowired 先根据类型(byType)查找,如果存在多个(Bean)再根据名称(byName)进行查找,而 @Resource 先根据名称(byName)查找,如果(根据名称)查找不到,再根据类型(byType)进行查找。 在 Spring 中,...
@Resource和@Autowired都是做bean的注入时使用,其实@Resource并不是Spring的注解,它的包是javax.annotation.Resource,需要导入,但是Spring支持该注解的注入。 1、共同点 两者都可以写在字段和setter方法上。两者...
@Resource 默认按照 Bean 的名字(byName)进行注入,而 @Autowired 默认按照类型(byType)进行注入。@Resource 的 name 和 type 属性可以控制注入策略。若不指定 name 和 type,将按照 byName 自动注入。 - 如果指定...
@Autowired 按 byType 自动注入,而 @Resource 默认按 byName 自动注入。@Resource 有两个重要的属性:name 和 type,Spring 将@Resource 注解的 name 属性解析为 bean 的名字,而 type 属性则解析为 bean 的类型。...
@Autowired按byType自动注入,而@Resource默认按byName自动注入。@Resource有两个重要的属性是name和type,Spring将@Resource注解的name属性解析为Bean的名字,而type属性则解析为Bean的类型。如果使用name属性,则...
在`TestCtl`控制器中,我们使用@Autowired注解注入`TestService`,Spring会找到唯一一个类型为`TestService`的bean,即`testServiceImpl`,并将其实例注入到`testService`字段中。 当有多个实现类,如新增了`...
Spring提供了五种自动装配模式:no(默认不自动装配)、byName、byType、constructor和autodetect。 显式装配是指在Spring配置文件中明确指定如何注入依赖,包括setter注入和构造器注入,这种方式虽然配置繁琐,但...
SpringMVC 中常用的注解标签详解 ...@Resource 可以按照 byName 或 byType 注入。 在 SpringMVC 中,理解和正确使用这些注解标签非常重要,它们可以使得开发者更方便地开发和维护 Web 应用程序。
* @Resource:等同于@Autowired,但@Resource 按 byName 自动注入,而@Autowired 按 byType 自动注入。 四、Request 参数相关注解 * @RequestParam:用于将请求参数区数据映射到功能处理方法的参数上。 五、校验...
@Resource 注解的作用相当于 @Autowired,唯一的区别是 @Resource 默认按照名称匹配的方式(byName)进行注入。@Resource 有两个属性,name 和 type,分别用于指定 Bean 的名称和类型。 二、类的注册 在 Spring 3....
因此,如果使用 name 属性,则使用 byName 的自动注入策略,而使用 type 属性时则使用 byType 自动注入策略。如果既不指定 name也不指定 type 属性,那么将通过反射机制使用 byName 自动注入策略。 例如,在 ...
与`@Autowired`类似,`@Resource`也可以实现依赖注入,但它默认采用按名称(byName)的方式进行注入。 `@Resource`具有`name`和`type`两个属性,通过设置这些属性可以指定注入方式: - **按名称注入**: ```java ...
- **byName**:根据bean属性的名称来寻找匹配的bean进行自动装配。 - **byType**:根据bean属性的类型来寻找匹配的bean进行自动装配。 - **constructor**:通过构造函数参数的类型来寻找匹配的bean,然后通过构造...