PS:自动装配,完成的是各个组件之间的依赖关系的赋值。至于基本数据的赋值可以通过其他赋值方式比如@Value实现。
1 @Autowired注解:
1.1 使用:Controller层调用Service层,然后调用Dao层。由于表示了@Controller相关注解,注册到了容器中,通过@Autowired注解,可以实现自动装配。
@Controller
public class BookController {
@Autowired
private BookService bookService;
}
@Service
public class BookService {
@Autowired
private BookDao bookDao;
}
@Repository
public class BookDao {
}
1.2 原理。
自动装配的时候,默认按照类型去容器中找对应的类型。《====》app.getBean(BookController.class);
如果该类型只存值一个bean,那么就自动装配。
如果同一个类型存在多个bean,首先按照类型匹配,存在多个,按照属性名匹配。
2 @Qualifier注解
PS:通常和@Autowired搭配使用。
使用背景:自动装配时候,默认在按照类型自动装配,如果存在一个就自动装配。如果存在多个,解决方法有二。
方法一:按照属性名匹配。
方法二:使用@Qualifier注解明确地指明想要标注的是哪个组件。
@Qualifier("bookService")
private BookService bookService;
3 @Primary注解
作用:使用该注解在容器中,同一个类型存在多个组件时,默认装配哪个组件。
背景:容器中存在BookService 类型bookService1和bookService2,就可以使用@Primary注解,指定默认装配bookService2。
PS:然后,还是可以通过@Qualifier注解指定最终装配哪个bean。
@Bean
@Primary
public BookService bookService2() {
BookService bookService = new BookService();
bookService.setLable("lable2");
return bookService;
}