最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring中的@Repository注解源碼詳解

 更新時(shí)間:2023年10月20日 10:43:56   作者:生命不息戰(zhàn)斗不止(王子晗)  
這篇文章主要介紹了Spring中的@Repository注解詳解,@Repository注解修飾哪個(gè)類,則表明這個(gè)類具有對(duì)對(duì)象進(jìn)行增刪改查的功能,而且@Repository是@Component注解的一個(gè)派生品,所以被@Repository注解的類可以自動(dòng)的被@ComponentScan通過路徑掃描給找到,需要的朋友可以參考下

@Repository注解

不多廢話,直接看源碼

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Repository {
    @AliasFor(
        annotation = Component.class
    )
    String value() default "";
}

分析如下

  • @Component代表@Repository可以把一個(gè)類組件加入到IOC容器中
  • @Target,target注解決定MyAnnotation注解可以加在哪些成分上,如加```xml
ElementType.TYPE // 作用在類身上
ElementType.Filed) //作用到屬性身上
ElementType.METHOD //作用到方法身上
  • @Retention注解決定MyAnnotation注解的生命周期

生命周期長(zhǎng)度 SOURCE < CLASS < RUNTIME ,所以前者能作用的地方后者一定也能作用

  • source:注解只保留在源文件,當(dāng)Java文件編譯成class文件的時(shí)候,注解被遺棄;被編譯器忽略,如果只是做一些檢查性的操作,比如 @Override 和 @SuppressWarnings,則可選用 SOURCE 注解
  • class:注解被保留到class文件,但jvm加載class文件時(shí)候被遺棄,這是默認(rèn)的生命周期,如果要在編譯時(shí)進(jìn)行一些預(yù)處理操作,比如生成一些輔助代碼(如 ButterKnife),就用 CLASS注解
  • runtime:注解不僅被保存到class文件中,jvm加載class文件之后,仍然存在,如果需要在運(yùn)行時(shí)去動(dòng)態(tài)獲取注解信息,那只能用 RUNTIME 注解

這3個(gè)生命周期分別對(duì)應(yīng)于:Java源文件(.java文件) ---> .class文件 ---> 內(nèi)存中的字節(jié)碼。

此時(shí)我們差不多把該注解剖析完了,該注解還有一個(gè)字段value,value其實(shí)是在java程序動(dòng)態(tài)運(yùn)行時(shí)去告訴Spring創(chuàng)建一個(gè)名字為xxx的組件實(shí)例,比如

@Repository(value="userServiceNew")
public class UserServiceImpl implements UserService {

    @Autowired
    UserMapper userMapper;

    public User Sel(int id){
        return userMapper.Sel(id);
    }
}

該注解是告訴Spring,讓Spring創(chuàng)建一個(gè)名字叫“userServiceNew的UserServiceImpl實(shí)例。當(dāng)Service需要使用Spring創(chuàng)建的名字叫“userServiceNew”的UserServiceImpl實(shí)例時(shí),就可以使用@Resource(name = “UserServiceNew”)注解告訴Spring,Spring把創(chuàng)建好的UserServiceImpl注入給Service即可。

@Repository(value="userServiceNew")
public class UserServiceImpl implements UserService {

    @Autowired
    UserMapper userMapper;

    public User Sel(int id){
        return userMapper.Sel(id);
    }
}

案例如下

@RestController
@RequestMapping("/testBoot")
public class UserController {
 
    @Resource(name = "userServiceNew")
    private UserService userService;
 
    @RequestMapping("getUser/{id}")
    public Object GetUser(@PathVariable int id){
        return userService.Sel(id);
    }
}

@Autowired注解和@Resource區(qū)別

作用范圍不相同(field,setter,constructor,method’s param)

  • @Autowired作用域:@Target({ElementType.CONSTRUCTOR, ElementType.METHOD, ElementType.PARAMETER, ElementType.FIELD, ElementType.ANNOTATION_TYPE})
  • @Resource作用域:@Target({ElementType.TYPE, ElementType.METHOD, ElementType.FIELD})

策略不同,前者默認(rèn)按類型操作,如果找到多個(gè)再按組件名字查找,或者通過@Qualifier判斷,有@Qualifier修飾那么直接按后者默認(rèn)按名字查找,即使沒有指定名字也會(huì)安裝注解作用的對(duì)象名來匹配,按默認(rèn)組件名沒有查找到再按類型查找

如果我另一個(gè)包出現(xiàn)了同名的類

@Service
public class UserServiceNew {
}

啟動(dòng)springboot時(shí)就會(huì)報(bào)錯(cuò):

Failed to parse configuration class [com.sobot.demo7.Demo7Application]; nested exception is org.springframework.context.annotation.ConflictingBeanDefinitionException: Annotation-specified bean name ‘userServiceNew’ for bean class [com.sobot.demo7.service.UserServiceNew] conflicts with existing, non-compatible bean definition of same name and class [com.sobot.demo7.service.UserServiceImpl]

SpringMVC的Controller 應(yīng)該是采用類似鍵值對(duì)(key/value)的映射方式處理的。而當(dāng)中的鍵,默認(rèn)是用cotroller的類名(非全類名)作為鍵。這樣,如果不同包下面的兩個(gè)Contoller 重名的話,就會(huì)導(dǎo)致SpringMVC的容器管理中的controller map中的key重復(fù)了。所以我們可以通過重命名來解決這個(gè)問題,比如

@Service(value = "userSerivce")
public class UserServiceNew {
}

到此這篇關(guān)于Spring中的@Repository注解源碼詳解的文章就介紹到這了,更多相關(guān)@Repository注解內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Springboot整合Swagger2和Swagger3全過程

    Springboot整合Swagger2和Swagger3全過程

    這篇文章主要介紹了Springboot整合Swagger2和Swagger3全過程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • java使用poi讀取ppt文件和poi讀取excel、word示例

    java使用poi讀取ppt文件和poi讀取excel、word示例

    這篇文章主要介紹了java使用poi讀取ppt文件和poi讀取excel、word示例,需要的朋友可以參考下
    2014-03-03
  • Hibernatede 一對(duì)多映射配置方法(分享)

    Hibernatede 一對(duì)多映射配置方法(分享)

    下面小編就為大家?guī)硪黄狧ibernatede 一對(duì)多映射配置方法(分享)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-09-09
  • Fluent Mybatis實(shí)際開發(fā)中的優(yōu)勢(shì)對(duì)比

    Fluent Mybatis實(shí)際開發(fā)中的優(yōu)勢(shì)對(duì)比

    本文給大家介紹如何通過IQuery和IUpdate定義強(qiáng)大的動(dòng)態(tài)SQL語句,給大家分享Fluent Mybatis實(shí)際開發(fā)中的優(yōu)勢(shì)講解,感興趣的朋友一起看看吧
    2021-08-08
  • 【Java IO流】字節(jié)流和字符流的實(shí)例講解

    【Java IO流】字節(jié)流和字符流的實(shí)例講解

    下面小編就為大家?guī)硪黄綣ava IO流】字節(jié)流和字符流的實(shí)例講解。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-09-09
  • 詳解Java如何使用責(zé)任鏈默認(rèn)優(yōu)雅地進(jìn)行參數(shù)校驗(yàn)

    詳解Java如何使用責(zé)任鏈默認(rèn)優(yōu)雅地進(jìn)行參數(shù)校驗(yàn)

    項(xiàng)目中參數(shù)校驗(yàn)十分重要,它可以保護(hù)我們應(yīng)用程序的安全性和合法性。這篇文章主要介紹了如何使用責(zé)任鏈默認(rèn)優(yōu)雅地進(jìn)行參數(shù)校驗(yàn),需要的可以參考一下
    2023-03-03
  • Spring Boot如何防止重復(fù)提交

    Spring Boot如何防止重復(fù)提交

    這篇文章主要為大家詳細(xì)介紹了Spring Boot如何防止重復(fù)提交,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-08-08
  • Java中使用注解校驗(yàn)手機(jī)號(hào)格式的詳細(xì)指南

    Java中使用注解校驗(yàn)手機(jī)號(hào)格式的詳細(xì)指南

    在現(xiàn)代的Web應(yīng)用開發(fā)中,數(shù)據(jù)校驗(yàn)是一個(gè)非常重要的環(huán)節(jié),本文將詳細(xì)介紹如何在Java中使用注解對(duì)手機(jī)號(hào)格式進(jìn)行校驗(yàn),感興趣的小伙伴可以了解下
    2025-03-03
  • SpringCloud OpenFeign使用詳解

    SpringCloud OpenFeign使用詳解

    在springcloud微服務(wù)生態(tài)體系下,作為服務(wù)之間相互調(diào)用的重要組件openfeign,在其中承擔(dān)著非常重要的作用,本篇以springcloud中提供的遠(yuǎn)程接口調(diào)用組件openfeign為例,來聊聊openfeign的詳細(xì)使用,感興趣的同學(xué)可以參考閱讀
    2023-05-05
  • springboot整合Mybatis、JPA、Redis的示例代碼

    springboot整合Mybatis、JPA、Redis的示例代碼

    這篇文章主要介紹了springboot整合Mybatis、JPA、Redis的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09

最新評(píng)論

嵩明县| 隆昌县| 临泽县| 赤水市| 林口县| 怀化市| 大石桥市| 永定县| 新竹县| 胶州市| 靖远县| 宜丰县| 璧山县| 大邑县| 泰州市| 牙克石市| 拉孜县| 沅陵县| 双江| 芷江| 佛坪县| 亚东县| 上杭县| 乌苏市| 阿合奇县| 商河县| 海晏县| 图木舒克市| 沙田区| 利辛县| 迁西县| 板桥市| 启东市| 昭苏县| 光泽县| 河北省| 梓潼县| 明光市| 井陉县| 嫩江县| 潞西市|