欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

@Autowired與@Resource在實(shí)現(xiàn)對(duì)象注入時(shí)的區(qū)別

 更新時(shí)間:2023年04月21日 11:36:04   作者:竇業(yè)童  
這篇文章主要介紹了@Autowired與@Resource在實(shí)現(xiàn)對(duì)象注入時(shí)的區(qū)別,有需要的朋友可以借鑒參考下,希望能夠有所幫助

簡(jiǎn)述

  • @Autowired 是來(lái)?于 Spring的注解,? @Resource 來(lái)?于 JDK 的注解;

2.@Autowired 可?于 Setter 注?、構(gòu)造函數(shù)注?和屬性注?,? @Resource 只能?于 Setter 注 ?和屬性注?,不能?于構(gòu)造函數(shù)注?

3.使用時(shí)設(shè)置的參數(shù)不同: @Resource 比@Autowired 支持更多的參數(shù)設(shè)置,例如 name 設(shè)置,根據(jù)名稱(chēng)獲取 Bean。下面詳細(xì)介紹

詳解

相同點(diǎn)1:屬性注入(Field Injection)

@Autowried

@Autowired//自動(dòng)裝配
private UserService userService;

@Resource

@Resource
private UserService userService;

常見(jiàn)面試題:

注入屬性的優(yōu)缺點(diǎn):

優(yōu)點(diǎn):使用簡(jiǎn)單方便

缺點(diǎn):

1.功能缺陷:不能注入一個(gè)不可變的對(duì)象(final對(duì)象)

為什么不能注入一個(gè)final修飾的變量呢?\color{green}{為什么不能注入一個(gè)final修飾的變量呢?}為什么不能注入一個(gè)final修飾的變量呢?

因?yàn)镾pring也要遵循Java的規(guī)范,final修飾的變量必須滿(mǎn)足1.使用時(shí)直接賦值,或者:2.構(gòu)造方法賦值

2.通用性問(wèn)題:只適用于IOC框架(容器)

3設(shè)計(jì)原則問(wèn)題,因?yàn)閷傩宰⑷牒?jiǎn)單方便,所以開(kāi)發(fā)者很容易就違背了單一設(shè)計(jì)原則。

相同點(diǎn)2:setter注入

//2. setter 注入(Setter Injection)
private UserService userService;
@Autowired
public void setUserService(UserService userService){
    this.userService = userService;
}
//使用Resource實(shí)現(xiàn)setter注入
private UserService userService;
@Resource
public void setUserService(UserService userService){
    this.userService = userService;
}

setter注入的優(yōu)點(diǎn):符合單一設(shè)計(jì)原則(一個(gè)setter只針對(duì)一個(gè)對(duì)象)

缺點(diǎn):

  • 和屬性注入一樣,不能注入一個(gè)不可變的對(duì)象(final對(duì)象)
  • 因?yàn)閟etter可以被調(diào)用多次,注入對(duì)象可以被修改,存在被篡改的可能

不同點(diǎn)1:@Autowried可以使用構(gòu)造方法注入,而@Resource不支持構(gòu)造方法注入

@Autowried

//3. 構(gòu)造方法注入(constructor Injection)
private UserService userService;
//當(dāng)當(dāng)前類(lèi)里面只有一個(gè)構(gòu)造方法的時(shí)候,@Autowired 可以省略,當(dāng)存在多個(gè)構(gòu)造方法時(shí)Autowired不能省略
//可以在一個(gè)構(gòu)造方法中注入多個(gè)對(duì)象,@Autowired也是可以省略的
private UserComponent userComponent;
@Autowired
public UserController(UserService userService, UserComponent userComponent){
    this.userService=userService;
    this.userComponent = userComponent;
}

注意:

1.setter注入和構(gòu)造方法注入@Autowried是添加在方法上面的

2.當(dāng)當(dāng)前類(lèi)里面只有一個(gè)構(gòu)造方法的時(shí)候,@Autowired 可以省略,當(dāng)存在多個(gè)構(gòu)造方法時(shí),@Autowired不能省略

3.可以在一個(gè)構(gòu)造方法中注入多個(gè)對(duì)象,如果當(dāng)前類(lèi)里面只有一個(gè)構(gòu)造方法的時(shí)候,@Autowired也是可以省略的

4.在Spring中,一個(gè)類(lèi)中可以有多個(gè)構(gòu)造方法,但是只能有一個(gè)構(gòu)造方法前面加了@Autowried,否則報(bào)錯(cuò),加了@Autowried的構(gòu)造方法才會(huì)被執(zhí)行。

構(gòu)造方法注入優(yōu)點(diǎn):

  • 能注入一個(gè)final修飾的屬性,因?yàn)樵跇?gòu)造方法中賦值了

  • 因?yàn)闃?gòu)造方法在對(duì)象創(chuàng)建時(shí)就會(huì)執(zhí)行一次,因此他不存在對(duì)象會(huì)被隨時(shí)(調(diào)用)修改的情況,所以注入對(duì)象不會(huì)被修改

  • 因?yàn)闃?gòu)造方法是在類(lèi)創(chuàng)建之初就會(huì)執(zhí)行的方法,依賴(lài)是在類(lèi)的構(gòu)造方法中的,所以依賴(lài)在對(duì)象使用前就會(huì)被完全初始化。

  • 通用性更好,因?yàn)闃?gòu)造方法是Java(JDK)支持的(最底層的框架)

@Resource不支持構(gòu)造方法注入\color{red}{@Resource不支持構(gòu)造方法注入}@Resource不支持構(gòu)造方法注入

不同點(diǎn)2:

出身不同,@Autowried是來(lái)自Spring的注解,@Resource是來(lái)自jdk的注解

不同點(diǎn)3:@Resource支持的參數(shù)比@Autowried

@Resource支持的參數(shù)

@Autowried支持的參數(shù)

舉參數(shù)name的例子來(lái)說(shuō)明 當(dāng)Spring中有多個(gè)@Bean注解,叫User的對(duì)象,

如果直接用

@Autowired//自動(dòng)裝配
private User user;

則會(huì)報(bào)錯(cuò)

Spring為了解決這個(gè)問(wèn)題推出了以下方法:

@Autowired
@Qualifier(value = "UserBeans_user1")
private User user;

而使用@Resource,可以直接地區(qū)Spring中稱(chēng)為UserBeans_user1的對(duì)象,復(fù)制到當(dāng)前類(lèi)的user上

@Resource(name = "UserBeans_user1")
private User user;

以上就是@Autowired與@Resource在實(shí)現(xiàn)對(duì)象注入時(shí)的區(qū)別的詳細(xì)內(nèi)容,更多關(guān)于@Autowired與@Resource區(qū)別的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • idea創(chuàng)建maven父子工程導(dǎo)致子工程無(wú)法導(dǎo)入父工程依賴(lài)

    idea創(chuàng)建maven父子工程導(dǎo)致子工程無(wú)法導(dǎo)入父工程依賴(lài)

    創(chuàng)建maven父子工程時(shí)遇到一個(gè)問(wèn)題,本文主要介紹了idea創(chuàng)建maven父子工程導(dǎo)致子工程無(wú)法導(dǎo)入父工程依賴(lài),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • SpringBoot自動(dòng)重啟、熱啟動(dòng)方式

    SpringBoot自動(dòng)重啟、熱啟動(dòng)方式

    這篇文章主要介紹了SpringBoot自動(dòng)重啟、熱啟動(dòng)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • 深入了解Maven Settings.xml文件的結(jié)構(gòu)和功能

    深入了解Maven Settings.xml文件的結(jié)構(gòu)和功能

    這篇文章主要為大家介紹了Maven Settings.xml文件基本結(jié)構(gòu)和功能詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-11-11
  • Java.SE數(shù)組的一些常見(jiàn)練習(xí)題

    Java.SE數(shù)組的一些常見(jiàn)練習(xí)題

    數(shù)組可以看成是相同類(lèi)型元素的一個(gè)集合,在內(nèi)存中是一段連續(xù)的空間,這篇文章主要給大家介紹了關(guān)于Java.SE數(shù)組的一些常見(jiàn)練習(xí)題,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-02-02
  • SpringBoot集成thymeleaf渲染html模板的步驟詳解

    SpringBoot集成thymeleaf渲染html模板的步驟詳解

    這篇文章主要給大家詳細(xì)介紹了SpringBoot集成thymeleaf如何使實(shí)現(xiàn)html模板的渲染,文中有詳細(xì)的代碼示例,具有一定的參考價(jià)值,需要的朋友可以參考下
    2023-06-06
  • java中如何獲取線(xiàn)程名稱(chēng)

    java中如何獲取線(xiàn)程名稱(chēng)

    這篇文章主要介紹了java中如何獲取線(xiàn)程名稱(chēng)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • Ajax實(shí)現(xiàn)搜索引擎自動(dòng)補(bǔ)全功能

    Ajax實(shí)現(xiàn)搜索引擎自動(dòng)補(bǔ)全功能

    本文主要介紹了Ajax實(shí)現(xiàn)搜索引擎自動(dòng)補(bǔ)全功能的實(shí)例解析。具有很好的參考價(jià)值。下面跟著小編一起來(lái)看下吧
    2017-04-04
  • Spring中的ImportSelector接口原理解析

    Spring中的ImportSelector接口原理解析

    這篇文章主要介紹了Spring中的ImportSelector接口原理解析,ImportSelector接口是spring中導(dǎo)入外部配置的核心接口,根據(jù)給定的條件(通常是一個(gè)或多個(gè)注釋屬性)判定要導(dǎo)入那個(gè)配置類(lèi),需要的朋友可以參考下
    2024-01-01
  • springboot?jpa?實(shí)現(xiàn)返回結(jié)果自定義查詢(xún)

    springboot?jpa?實(shí)現(xiàn)返回結(jié)果自定義查詢(xún)

    這篇文章主要介紹了springboot?jpa?實(shí)現(xiàn)返回結(jié)果自定義查詢(xún)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • EasyUi+Spring Data 實(shí)現(xiàn)按條件分頁(yè)查詢(xún)的實(shí)例代碼

    EasyUi+Spring Data 實(shí)現(xiàn)按條件分頁(yè)查詢(xún)的實(shí)例代碼

    這篇文章主要介紹了EasyUi+Spring Data 實(shí)現(xiàn)按條件分頁(yè)查詢(xún)的實(shí)例代碼,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2017-07-07

最新評(píng)論