上一遍文章中有簡單的介紹@Autowired註解的使用,沒有查看的同學可以點擊查看,但是那偏文章只介紹了@Autowired註解的一種使用方式,當然也是常用的方式就是@Autowired註解加在成員變量上,今天將介紹另外的幾種使用方式:
@Autowired註解加在方法上
@Autowired註解加在構造方法上
@Autowired註解加在參數上
1,@Autowired註解加在方法上
修改之前的UserService如下在setUserDao方法上加上@Autowired註解:
@Service
public class UserService {
// @Autowired(required=false)
private UserDao userDao;
public UserDao getUserDao() {
return userDao;
}
@Autowired
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
/**
* 增加一個tostring方法 方便測試
*/
@Override
public String toString() {
return "UserService [userDao=" + userDao + "]";
}
}
測試代碼如下:
AnnotationConfigApplicationContext applicationContext2 = new AnnotationConfigApplicationContext(MainScanConfig.class);
UserService object = (UserService) applicationContext2.getBean("userService");
System.out.println("實例bean爲 === "+object);
運行我們可以發現userDao同樣成功的注入到了UserService中了
2,@Autowired註解加在構造方法上
我們繼續修改UserService把@Autowired註解加在UserService對應的構造方法上如下:
@Service
public class UserService {
// @Autowired(required=false)
private UserDao userDao;
/**
* spring 在啓動的時候會調用這個有參構造方法
* @param userDao
*/
@Autowired
public UserService(UserDao userDao){
this.userDao=userDao;
}
/**
* 增加一個tostring方法 方便測試
*/
@Override
public String toString() {
return "UserService [userDao=" + userDao + "]";
}
}
運行測試我們可以發現userDao同樣成功的注入到了UserService中
3,@Autowired註解加在參數上
繼續修改以上代碼如下:
@Service
public class UserService {
// @Autowired(required=false)
private UserDao userDao;
/**
* spring 在啓動的時候會調用這個有參構造方法
* 如果只有一個有參構造方法則@Autowired註解也可以省略
* @param userDao
*/
public UserService(@Autowired UserDao userDao){
this.userDao=userDao;
}
/**
* 增加一個tostring方法 方便測試
*/
@Override
public String toString() {
return "UserService [userDao=" + userDao + "]";
}
}
註解與第二種的區別@Autowired加到了對應的參數中,如果就一個有參構造方法,@Autowired註解也可以省略,測試結果可以發現同樣成功注入
雖然後邊這幾種方法我們不常用,但是作爲知識的補充還是有必要的,萬一哪位同學寫了這樣的代碼,我們也不至於看不懂
以上是今天文章的所有內容,歡迎大家吐槽
推薦閱讀深入理解spring生命週期與BeanPostProcessor的實現原理
更多優質文章請關注以下公衆號查閱: