注解@Autowired与@Resource的差别

81 阅读1分钟

本文将简写@Autowired为@A ,@Resource为@R

结论:推荐使用@Autowired

不同点

  • @A通过类型注入依赖。@R通过名称注入依赖
  • @A先按类型自动查找与指定类型匹配的bean,找不到会抛出异常。@R自动查找与名称类型匹配的bean,找不到会使用默认的bean
  • @A主要用于构造函数、属性、setter、方法和配置方法注入bean。@R主要用于字段注入
  • @A只能在spring项目中使用。@R不受限制,兼容性较强

上方内容分析:
构造函数注入

public class MyClass { 
   private MyDependency myDependency; 
   
   @Resource 
   public MyClass(MyDependency myDependency) { 
      this.myDependency = myDependency; 
   } 
   // ... 
}

方法注入 image.png

—— 当在类上添加@Service注解时,Spring会自动将这个类注入到Spring容器中。这个类可以在其他类中以bean的方式注入到其他类中。当使用@Autowired注解时,Spring会在bean中找与指定类型相同的bean。如果找到了,就会将其注入到当前类中。
例如:
现在假设你有一个名为MyService的类,在其上方添加注解@Service,那么你可以在其他类中使用注解@Autowired将这个名为MyService的类注入到其他类当中。

@A示例:
在这个例子中,Spring会自动将MyRepository注入到MyService中。

@Service
public class MyService {
  @Autowired 
  private MyRepository myRepository;
  // ...
}

@Repository
public class MyRepository {
  // ...
}

@R示例:
在这个例子中,Spring会自动将名为myBean的bean注入到MyService中。

@Service
public class MyService {
  @Resource(name = "myBean")
  private MyBean myBean;
 // ...
}

@Component
public class MyComponent {
  @Resource(name = "myBean")
  private MyBean myBean;
 // ...
}