javascript
Spring中常用注解及其作用(二)
9.@AutoWired
這個注解的英文直譯是“自動裝配”,“自動注入”
它就像一根水管一樣,兩端接上水桶,然后就可以把一個桶里面的水自動注入到另一個桶中。
這兩端的桶,可以是 類成員變量/方法/構造函數
中間流的水,可以是 數組/集合/Map/父類屬性
一般使用場景:
@Servicepublic class UserService {@Autowired//定義一個變量來接收注入過來的類private UserRepository userRepository;public void save(){//然后就可以通過點來調用這個類里面的方法userRepository.save();}}注意事項:
@Autowired是ByType的,在使用時首先在容器中查詢對應類型的bean
如果查詢結果剛好為一個,就將該bean裝配給@Autowired指定的數據
如果查詢的結果不止一個,那么@Autowired會根據名稱來查找(首字母小寫)。
如果查詢的結果為空,那么會拋出異常。解決方法是,@AutoWired(required=false)
@AutoWired加在變量/方法上面與加在構造器上面有什么區別?
答:加在構造器上面更保險一些。
因為Java變量的初始化順序為:
靜態變量或靜態語句塊–>實例變量或初始化語句塊–>構造方法–>@Autowired
如果在加在變量/方法上面,那么下面這段代碼就會報錯
@Autowired private User user; private String school;public UserAccountServiceImpl(){this.school = user.getSchool(); }因為先會執行構造方法,而這個時候還沒有注入,所以get不出來,會報空指針錯誤。
相反,如果加在構造器上面就不會報錯。如下:
private User user; private String school;@Autowired public UserAccountServiceImpl(User user){this.user = user;this.school = user.getSchool(); }10.Qualifer
這個注解是用來輔助@AutoWired注解來使用的。
用于當@AutoWired在注入父類屬性時有兩個或以上實現類時,指定要用哪個。
👆上面在@AutoWired注解里面說了,當實現類有多個的時候,它會自動去找和它名稱相同的實現類(首字母小寫),但如果我們不想這樣,就可以加一個@Qualifer注解來指定具體要注入哪一個實現類。
舉例如下??:
//父級接口 public interface IMenuService {/*** 獲取所有菜單列表* * @return List<MenuEntity>*/public List<MenuEntity> getAllMenuList(); }//實現類1 @Service("menuService1") public class MenuServiceImpl implements IMenuService {@Autowiredprivate MenuMapper mapper;/*** 獲取所有菜單*/@Overridepublic List<MenuEntity> getAllMenuList() {MenuEntityExample example = new MenuEntityExample();long start = System.currentTimeMillis();example.setDistinct(false);List<MenuEntity> allMneuList = mapper.selectByExample(example);}//實現類2 @Service("menuService2") public class MenuServiceImpl implements IMenuService {/*** 獲取所有菜單*/@Overridepublic List<MenuEntity> getAllMenuList() {return null;}現在如果想要注入實現類1的話,應該這樣??
@Autowired@Qualifier("menuService1")private IMenuService menuService;想要 注入實現類2的話,應該這樣??
@Autowired@Qualifier("menuService2")private IMenuService menuService;11.@Resource
這個注解的作用和@AutoWired一致,
只不過@AutoWired是ByType的,而@Resource是ByName的
@AutoWired首先按類型查找,同類型的有多個時,才按照首字母小寫來匹配
@Resource首先按照名稱查找,沒有對應名稱時,才按照類型匹配
總結
以上是生活随笔為你收集整理的Spring中常用注解及其作用(二)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【opencv14】cv::Mat---
- 下一篇: 用于Firefox的Google工具栏B