@Autowired, @Inject, @Resource 三个注解的作用和区别

/ 技术笔记 / 0 条评论 / 359浏览

前言

先说明一下, 这三个注解都可以用在注入对象时使用. 他们两个是javax包下自带的, 一个是由spring提供给我们的.

@Autowired

先说Autowired, 因为他是我们大多数人经常使用到的, 它是由spring为我们提供的依赖注入的注解,

@Resource

这个注解大多数人不常使用, 它是javax包提供的, 基于 JSR250 的注解. 我平时更多的是使用它.

@Inject

这个注解应该大多数人都没见过, 在写文章之前, 我也没见过 :)
这个注解是遵循 JSR330 规范的, 是由javax包提供的. 这里简单讲解一下(其实就是@Autowired的翻版).
它可以作用在@Autowired能作用的地方, 并且默认也是根据类型装配, 通过 @Named 修改为根据 名称 装配.
它与Autowired不同点在于它没有 required 参数

总结

  1. @Autowired是Spring提供给我们的, @Inject(遵循JSR330规范)和@Resource(遵循JSR250规范)是javax包提供给我们的.
  2. @Autowired和@Inject是根据类型装配, @Resource是根据名称装配.
  3. @Autowired有required参数, @Inject没有.
  4. @Autowired配合@Qualifier可以使用名称装配, @Inject配合@Named可以使用名称装配, @Resource根据名称无法装配时, 会根据类型装配.

平时使用记住一种就可以了. 一般推荐使用 @Autowired, 毕竟你是用它们的框架.