20、自動裝配[email protected]&@Qualifier&am
阿新 • • 發佈:2018-11-29
20、自動裝配[email protected]&@Qualifier&@Primary
- 自動裝配:Spring 利用依賴注入(DI),完成對IOC容器中各個依賴關係賦值
20.1 @Autowired :自動注入
- 預設優先按照型別去容器中找對應的元件,
applicationContext.getBean(BookRepository.class)
,找到就賦值。 - 如果找到多個相同型別的元件,再將屬性名稱作為元件的id 去容器中查詢
applicationContext.getBean("bookRepository")
- 使用
@Qualifier("bookRepository")
- 自動裝配預設一定要將屬性賦值好,沒有就會報錯。可以使用
@Autowired(required = false)
來配置非必須的注入,有則注入,沒有就算了。 @Primary
讓Spring進行自動裝配的時候,預設選擇需要裝配的bean,也可以繼續使用@Qualifier
指定需要裝配的bean的名稱@Qualifier
的權重大於@Primary
,如果指定了@Qualifier
則@Primary
失效
20.2 程式碼例項
- MainConfigOfAutowired.java
package com.hw.springannotation.config; import com.hw.springannotation.dao.BookRepository; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Primary; import javax.management.relation.RelationType; /** * @Description 自動裝配: * <p> * Spring 利用依賴注入(DI),完成對IOC容器中各個依賴關係賦值 * 1. @Autowire * @Author hw * @Date 2018/11/29 16:04 * @Version 1.0 */ @Configuration @ComponentScan({"com.hw.springannotation.service", "com.hw.springannotation.controller", "com.hw.springannotation.dao"}) public class MainConfigOfAutowired { @Primary // 首選裝配bean @Bean("bookRepository2") public BookRepository bookRepository() { return new BookRepository("2"); } }
- BookService.java
@Service public class BookService { @Autowired(required = false) // @Qualifier("bookRepository") private BookRepository bookRepository2; public void print() { System.out.println("bookRepository2。。。"); } @Override public String toString() { return "BookService{" + "bookRepository=" + bookRepository2 + '}'; } }
- 測試用例
AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(MainConfigOfAutowired.class);
@Test
public void test1() {
BookService bookService = applicationContext.getBean(BookService.class);
System.out.println(bookService);
applicationContext.close();
}