1. 程式人生 > >@Autowired與@Resource

@Autowired與@Resource

@Autowired和@Resource都用於依賴物件的自動裝配

@Autowired

  • 按照型別(byType)裝配依賴物件
  • IOC容器中有且僅有一個該型別的物件,將該物件注入
  • IOC容器中沒有該型別的物件,且依賴變數可為空
    • 解決辦法: @Autowired(required = false)
  • IOC容器中有多個該型別物件,Spring不知道應該繫結哪個物件會報錯
    • 解決辦法:和@Qualifier註解配合使用,改成按照名稱(byName)裝配
    @Autowired
    @Qualifier(
    "userService1") //要注入的物件名(必須在IOC中存在) UserService userService;// qualifier 合格者

@Resource

@Resource有兩個重要的屬性:name、type

@Resource//預設按照ByName裝配依賴物件
private UserService userService;
@Resource(name="userService")// 按byName裝配
private UserService userService;
@Resource(type="UserService")// 按byType裝配
private
UserService userService; @Resource(type="UserService",name="userService")// 按byType、byName共同查詢來裝配 private UserService userService;

@Autowired裝配List、Map

大部分是用@Autowired來注入一個bean,其實@Autowired還可以注入List和Map

	// 定義四個同類型的bean
	@Bean("user1")
	@Qualifier("valid")
    User user1() {
        return new User
("1", "a"); } @Bean("user2") @Qualifier("valid") User user2() { return new User("1", "b"); } @Bean("user3")) @Qualifier("invalid") User user3() { return new User("2", "c"); } @Bean("user4")) @Qualifier("invalid") User user4() { return new User("2", "d"); }
// controller中注入List/Map
@Autowired(required = false)
@Qualifier("valid")
private List<User> users = Collections.emptyList();// 只有user1、user2注入進來
@Autowired(required = false)
@Qualifier("invalid")
private Map<String,User> userMap = new HashMap<>();// 只有user3、user4注入進來
//當注入map時,map的key必須是String型別,bean name將作為map的key