@Resource:
@Resource
是Java EE提供的注解,也可以在Spring中使用。它是按照名称进行注入的,默认通过属性名(通常是类名的小驼峰命名方式)或者name
属性来匹配。如果找不到符合名称的bean,则会抛出异常。在使用时可以指定 name
属性来明确指定要注入的bean的名称,也可以通过 type
属性来指定要注入的bean的类型。 示例:
假设有一个叫做 SomeBean
的类:
@Component
public class SomeBean {
// ...
}
使用 @Resource
注解来注入该类的实例时,可以直接在需要注入的属性上使用 @Resource
注解,属性名会被默认匹配到对应的bean:
@Component
public class AnotherBean {
@Resource
private SomeBean someBean;
// ...
}
但需要注意以下问题:
-
命名不一致:如果属性名与bean的名称不一致,将无法正确匹配到对应的bean,会抛出异常。此时可以通过指定
name
属性来明确指定要注入的bean的名称。@Component public class AnotherBean { @Resource(name = "otherName") private SomeBean someBean; // ... }
我们使用
@Resource
注解的name
属性指定了要注入的 bean 的名称为 "otherName"。因此,Spring 会在容器中查找名称为 "otherName" 的 bean,并将其注入到AnotherBean
类的someBean
属性中 -
多个匹配项:如果存在多个符合类型的bean,且都符合属性名匹配规则,会抛出异常。此时可以通过指定
name
属性来明确指定要注入的bean的名称,或者结合@Qualifier
注解使用。举个例子,假设有两个名为
someBean1
和someBean2
的 bean:@Component("someBean1") public class SomeBean { // ... } @Component("someBean2") public class AnotherBean { // ... } @Component public class YetAnotherBean { @Autowired @Qualifier("someBean1") private SomeBean someBean; // ... }
@Qualifier
注解中的值应该是要注入的 bean 的名称或标识符,而不是属性名或类名。
@Autowired:
@Autowired是Spring框架提供的注解,在Spring中广泛应用。它默认按照类型进行注入,通过匹配对象类型来实现自动装配。如果存在多个匹配的bean,可以使用 @Qualifier
注解结合 @Autowired
来指定具体的bean名称进行注入。 示例:
@Autowired
private SomeBean someBean;
-
@Autowired
是非必须的,如果找不到匹配的Bean,Spring容器仍然会正常启动。 -
@Resource
是必须的,如果找不到匹配的Bean,会抛出异常。