注解@AutoWired
2020.01.24 13:58
2020.01.24 13:58
@AutoWired原理
前面讲解了基于@AutoWired注解的自动装配,但其中还涉及一些问题,需要我们解决!
对于
@AutoWired
private BookService bookService; // 这里bookService即为默认id
来说,
@AutoWired的步骤:
先按照类型去找,即找BookService
类型的,等价于:ap.getBean(BookService.class);
-
找到一个:就赋值,进行其他步骤。
-
没找到:抛异常。
-
找到多个同类型:比如这里有一个BookServiceExt继承自BookService,
-
按照变量名作为id,则有两个BookService(默认id: bookServicec)、BookServiceExt(默认id:bookServiceExt)等待你去查找,然后判断在这两个id中有没有与默认id相匹配的
- 匹配上:皆大欢喜,注入成功!
- 未匹配上:报错!
-
没有相配的,解决办法:使用
@Qualifier("自定义id")
注解,让spring别使用默认的id(类名首字母小写),用我自定义的!代码如下:
@AutoWired @Qualifier("bookServiceExt") // 代表我这里的变量要装配的类似是bookServiceExt,别装配错啦! private BookService bookService; // 这里bookService即为默认id
-
-
是不是必须要找到?因为@AutoWired有个属性为required,默认是true,如果你的要求是可以找不到,那么赋值为false即可,那此时如果装配不上,就赋值为null。
@AutoWired范围
@AutoWired注解可在:
- 构造器上
- 方法上
- 变量上
- 注解上
加入!
A. 方法上:
这个方法的每一个参数都会自动装配。
代码:
BookController
@Autowired
public void hello(BookDao bookDao, BookService bookService1) {
System.out.println("bookDao:" + bookDao);
System.out.println("bookService1:" + bookService1);
}
Test01
@Test
public void test03() {
BookController bookController = ap.getBean("bookController", BookController.class);
}
结果:
本节阅读完毕!
(分享)