都是依赖注入,@Autowired 和 @Resource 的有什么不一样

33 阅读1分钟

1.来源不同:

@Autowired 是 Spring 框架自带的注解,属于 Spring 的一部分。它主要用于实现自动装配,即根据类型自动注入对应的 Bean。

import org.springframework.beans.factory.annotation.Autowired;

@Resource 是 JSR-250 规范中定义的注解,是 Java EE 的一部分,它提供了一种按名称注入对象的方式。注意@Resource并不是string的

import javax.annotation.Resource;   

2.注入方式不同:

@Autowired 的自动注入是根据类型(by Type)进行的,如果有多个相同类型的 Bean,可以通过 @Qualifier 指定具体的 Bean。

@Component

public class Example {

    @Autowired

    @Qualifier("beanA")

    private BeanInterface bean;

}

@Resource 的默认注入方式是按照名称(by Name)进行的,它可以指定 Bean 的名称或者使用默认的 Bean 名称,即和成员变量名相同的 Bean 名称。

@Component

public class Example {

    @Resource(name="beanA")

    private BeanInterface bean;

}

3.兼容性不同:

@Autowired 支持更多的特性,例如支持 @Qualifier 注解指定具体的 Bean。


@Component

public class Example {

    @Autowired

    @Qualifier("beanA")

    private BeanInterface bean;

}

@Resource 不支持 @Qualifier,但是支持 name 属性指定 Bean 的名称。  

@Component

public class Example {

    @Resource(name="beanA")

    private BeanInterface bean;

}

4.使用场景不同:

@Autowired 主要用于 Spring 应用程序的依赖注入,它是 Spring 框架自带的一种依赖注入方式。

@Resource 不依赖于 Spring 框架,它属于 Java EE 的一部分,主要用于 Java EE 应用程序,但也可以在 Spring 应用程序中使用。

选择使用哪种注解应该根据具体的情况来决定。如果是 Spring 应用程序,优先考虑使用 @Autowired;如果是 Java EE 应用程序或者需要兼容多种框架,则可以使用 @Resource。