前言
本章的内容主要是想探讨我们在进行Spring 开发过程当中,关于依赖注入的几个知识点。感兴趣的读者可以先看下以下问题:
@Autowired
,@Resource
,@Inject
三个注解的区别- 当你在使用
@Autowired
时,是否有出现过Field injection is not recommended
的警告?你知道这是为什么吗? - Spring 依赖注入有哪几种方式?官方是怎么建议使用的呢?
如果你对上述问题都了解,那我个人觉得你的开发经验应该是不错的????。
下面我们就依次对上述问题进行解答,并且总结知识点。
@Autowired
, @Resource
, @Inject
三个注解的区别
Spring 支持使用@Autowired
, @Resource
, @Inject
三个注解进行依赖注入。下面来介绍一下这三个注解有什么区别。
@Autowired
@Autowired
为Spring 框架提供的注解,需要导入包org.springframework.beans.factory.annotation.Autowired
。
这里先给出一个示例代码,方便讲解说明:
public interface Svc {
void sayHello();
}
@Service
public class SvcA implements Svc {
@Override
public void sayHello() {
System.out.println("hello, this is service A");
}
}
@Service
public class SvcB implements Svc {
@Override
public void sayHello() {
System.out.println("hello, this is service B");
}
}
@Service
public class SvcC implements Svc {
@Override
public void sayHello() {
System.out.println("hello, this is service C");
}
}
测试类:
@SpringBootTest
public class SimpleTest {
@Autowired
// @Qualifier("svcA")
Svc svc;
@Test
void rc() {
Assertions.assertNotNull(svc);
svc.sayHello();
}
}
装配顺序:
-
按照
type
在上下文中查找匹配的bean查找type为Svc的bean
-
如果有多个bean,则按照
name
进行匹配-
如果有
@Qualifier
注解,则按照@Qualifier
指定的
-