【970、autowired和resource的区别】

103 阅读1分钟

@Autowired@Resource 都是 Java 中用于进行依赖注入的注解,但它们在使用方式和作用上有一些不同。

  1. 来源:

    • @Autowired 是Spring框架的注解,用于进行Spring容器管理的bean之间的自动装配。
    • @Resource 是Java EE(Enterprise Edition)的注解,包含在javax.annotation包中,可用于进行依赖注入,不仅限于Spring框架。
  2. 自动装配:

    • @Autowired 实现了自动装配,它根据类型匹配自动注入依赖项。如果存在多个匹配的候选项,它可以根据属性名称进行进一步的解析,以解决歧义。
    • @Resource 主要通过名称进行自动装配。它首先尝试按名称匹配,然后根据类型进行匹配。如果存在多个具有相同名称的bean,那么它会根据类型进行匹配,但不具备@Autowired的歧义解决能力。
  3. 使用场景:

    • @Autowired 更常用于Spring应用程序,特别是在Spring框架中进行依赖注入时。
    • @Resource 通常用于Java EE应用程序,它也可以在非Spring环境中使用,但通常不具备@Autowired的高度灵活性。
  4. 引入包:

    • @Autowired 需要引入org.springframework.beans.factory.annotation.Autowired包。
    • @Resource 需要引入javax.annotation.Resource包。

示例使用@Autowired的方式:

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

public class MyService {
    private MyRepository myRepository;

    @Autowired
    public MyService(MyRepository myRepository) {
        this.myRepository = myRepository;
    }
}

示例使用@Resource的方式:

import javax.annotation.Resource;

public class MyService {
    @Resource
    private MyRepository myRepository;
}

总之,@Autowired@Resource 都可以用于依赖注入,但它们的使用场景和行为略有不同,根据具体的应用和需求选择合适的注解。如果你正在使用Spring框架,通常更倾向于使用@Autowired