日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 前端技术 > javascript >内容正文

javascript

Spring中常用注解及其作用(二)

發(fā)布時(shí)間:2023/12/16 javascript 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spring中常用注解及其作用(二) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

9.@AutoWired

這個(gè)注解的英文直譯是“自動(dòng)裝配”,“自動(dòng)注入”

它就像一根水管一樣,兩端接上水桶,然后就可以把一個(gè)桶里面的水自動(dòng)注入到另一個(gè)桶中。

這兩端的桶,可以是 類成員變量/方法/構(gòu)造函數(shù)

中間流的水,可以是 數(shù)組/集合/Map/父類屬性

一般使用場(chǎng)景:

@Servicepublic class UserService {@Autowired//定義一個(gè)變量來(lái)接收注入過(guò)來(lái)的類private UserRepository userRepository;public void save(){//然后就可以通過(guò)點(diǎn)來(lái)調(diào)用這個(gè)類里面的方法userRepository.save();}}

注意事項(xiàng):

@Autowired是ByType的,在使用時(shí)首先在容器中查詢對(duì)應(yīng)類型的bean

如果查詢結(jié)果剛好為一個(gè),就將該bean裝配給@Autowired指定的數(shù)據(jù)

如果查詢的結(jié)果不止一個(gè),那么@Autowired會(huì)根據(jù)名稱來(lái)查找(首字母小寫)。

如果查詢的結(jié)果為空,那么會(huì)拋出異常。解決方法是,@AutoWired(required=false)

@AutoWired加在變量/方法上面與加在構(gòu)造器上面有什么區(qū)別?

答:加在構(gòu)造器上面更保險(xiǎn)一些。

因?yàn)镴ava變量的初始化順序?yàn)?#xff1a;
靜態(tài)變量或靜態(tài)語(yǔ)句塊–>實(shí)例變量或初始化語(yǔ)句塊–>構(gòu)造方法–>@Autowired

如果在加在變量/方法上面,那么下面這段代碼就會(huì)報(bào)錯(cuò)

@Autowired private User user; private String school;public UserAccountServiceImpl(){this.school = user.getSchool(); }

因?yàn)橄葧?huì)執(zhí)行構(gòu)造方法,而這個(gè)時(shí)候還沒(méi)有注入,所以get不出來(lái),會(huì)報(bào)空指針錯(cuò)誤。

相反,如果加在構(gòu)造器上面就不會(huì)報(bào)錯(cuò)。如下:

private User user; private String school;@Autowired public UserAccountServiceImpl(User user){this.user = user;this.school = user.getSchool(); }

10.Qualifer

這個(gè)注解是用來(lái)輔助@AutoWired注解來(lái)使用的。
用于當(dāng)@AutoWired在注入父類屬性時(shí)有兩個(gè)或以上實(shí)現(xiàn)類時(shí),指定要用哪個(gè)。

👆上面在@AutoWired注解里面說(shuō)了,當(dāng)實(shí)現(xiàn)類有多個(gè)的時(shí)候,它會(huì)自動(dòng)去找和它名稱相同的實(shí)現(xiàn)類(首字母小寫),但如果我們不想這樣,就可以加一個(gè)@Qualifer注解來(lái)指定具體要注入哪一個(gè)實(shí)現(xiàn)類。

舉例如下??:

//父級(jí)接口 public interface IMenuService {/*** 獲取所有菜單列表* * @return List<MenuEntity>*/public List<MenuEntity> getAllMenuList(); }//實(shí)現(xiàn)類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);}//實(shí)現(xiàn)類2 @Service("menuService2") public class MenuServiceImpl implements IMenuService {/*** 獲取所有菜單*/@Overridepublic List<MenuEntity> getAllMenuList() {return null;}

現(xiàn)在如果想要注入實(shí)現(xiàn)類1的話,應(yīng)該這樣??

@Autowired@Qualifier("menuService1")private IMenuService menuService;

想要 注入實(shí)現(xiàn)類2的話,應(yīng)該這樣??

@Autowired@Qualifier("menuService2")private IMenuService menuService;

11.@Resource

這個(gè)注解的作用和@AutoWired一致,
只不過(guò)@AutoWired是ByType的,而@Resource是ByName的
@AutoWired首先按類型查找,同類型的有多個(gè)時(shí),才按照首字母小寫來(lái)匹配
@Resource首先按照名稱查找,沒(méi)有對(duì)應(yīng)名稱時(shí),才按照類型匹配

總結(jié)

以上是生活随笔為你收集整理的Spring中常用注解及其作用(二)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。