Spring依赖注入的方式
小结
@Autowired
是Spring提供的注入规范@Resource
是Java提供的注入(JSR250提供)@Inject
是Java提供的注入(JSR330提供)- 区别:
@Autowired
默认是以类型进行注入,@Resource
默认以名字进行注入,如果名字不匹配再进行类型注入,@Inject
是以类型进行注入。
前提
Bean或组件被加入到IOC容器中
- 基于
@ComponentScan
扫描器 + 三层注解(@Component
、@Controller
、@Service
、@Repository
)的形式 @Configuration
+@Bean
的返回值形式
1. @Autowired、Setter注入
@Autowired
默认是根据类型注入,其次再根据名称注入- 若搭配
@Qualifier
注解使用,则为名称注入 - 当前Spring已不建议使用@Autowired标记字段的形式注入,推荐使用构造器注入。
2. @Resource注入
@Resource
是Java提供的注入(JSR250提供)- 默认是按照名称注入(无选项参数时),其次再根据类型注入,推荐
@Resource
和name选项一起使用。
3. 构造器注入
-
构造器注入也是Spring当前推荐的注入形式,直接在构造方法前添加
@Autowired
注解即可
-
但当注入的对象过多时就会导致构造器代码过长,可读性差。于是可以使用lombok的
@RequiredArgsConstructor
注解,并给注入的对象加上final修饰进行注入。
4. @Inject注入
- 需要添加
javax.inject
包下的依赖 - 同
@Autowired
的注释相似,可以标记在属性、构造方法和setter方法上