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

通過實(shí)例了解java spring使用構(gòu)造器注入的原因

 更新時(shí)間:2019年12月18日 11:43:59   作者:гàΙη  
這篇文章主要介紹了通過實(shí)例了解spring使用構(gòu)造器注入的原因,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

這篇文章主要介紹了通過實(shí)例了解spring使用構(gòu)造器注入的原因,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

一、前言

Spring框架對Java開發(fā)的重要性不言而喻,其核心特性就是IOC(Inversion of Control, 控制反轉(zhuǎn))和AOP,平時(shí)使用最多的就是其中的IOC,我們通過將組件交由Spring的IOC容器管理,將對象的依賴關(guān)系由Spring控制,避免硬編碼所造成的過度程序耦合。

二、常見的三種注入方式

2.1 field注入

@Controller
public class FooController {
 @Autowired
 //@Inject
 private FooService fooService;
 
 //簡單的使用例子,下同
 public List<Foo> listFoo() {
   return fooService.list();
 }
}

這種注入方式應(yīng)該是筆者目前為止開發(fā)中見到的最常見的注入方式。原因很簡單:

注入方式非常簡單:加入要注入的字段,附上@Autowired,即可完成。

使得整體代碼簡潔明了,看起來美觀大方。

2.2 構(gòu)造器注入

@Controller
public class FooController {
 
 private final FooService fooService;
 
 @Autowired
 public FooController(FooService fooService) {
   this.fooService = fooService;
 }
 
 //使用方式上同,略
}

在Spring4.x版本中推薦的注入方式就是這種,相較于上面的field注入方式而言,就顯得有點(diǎn)難看,特別是當(dāng)注入的依賴很多(5個(gè)以上)的時(shí)候,就會明顯的發(fā)現(xiàn)代碼顯得很臃腫

2.3 setter注入

@Controller
public class FooController {
 
 private FooService fooService;
 
 //使用方式上同,略
 @Autowired
 public void setFooService(FooService fooService) {
   this.fooService = fooService;
 }
}

在Spring3.x剛推出的時(shí)候,推薦使用注入的就是這種,但是構(gòu)造器注入?yún)?shù)太多了,顯得很笨重,另外setter的方式能用讓類在之后重新配置或者重新注入。

三、構(gòu)造器注入的好處

這個(gè)構(gòu)造器注入的方式,能夠保證注入的組件不可變,并且確保需要的依賴不為空。此外,構(gòu)造器注入的依賴總是能夠在返回客戶端(組件)代碼的時(shí)候保證完全初始化的狀態(tài)

  • 依賴不可變:其實(shí)說的就是final關(guān)鍵字,這里不再多解釋了。不明白的園友可以回去看看Java語法。
  • 依賴不為空(省去了我們對其檢查):當(dāng)要實(shí)例化FooController的時(shí)候,由于自己實(shí)現(xiàn)了有參數(shù)的構(gòu)造函數(shù),所以不會調(diào)用默認(rèn)構(gòu)造函數(shù),那么就需要Spring容器傳入所需要的參數(shù),所以就兩種情況:1、有該類型的參數(shù)->傳入,OK 。2:無該類型的參數(shù)->報(bào)錯(cuò)。所以保證不會為空,Spring總不至于傳一個(gè)null進(jìn)去吧 。
  • 完全初始化的狀態(tài):這個(gè)可以跟上面的依賴不為空結(jié)合起來,向構(gòu)造器傳參之前,要確保注入的內(nèi)容不為空,那么肯定要調(diào)用依賴組件的構(gòu)造方法完成實(shí)例化。而在Java類加載實(shí)例化的過程中,構(gòu)造方法是最后一步(之前如果有父類先初始化父類,然后自己的成員變量,最后才是構(gòu)造方法,這里不詳細(xì)展開)。所以返回來的都是初始化之后的狀態(tài)。

四、總結(jié)

使用構(gòu)造器注入的好處:

  • 保證依賴不可變(final關(guān)鍵字)
  • 保證依賴不為空(省去了我們對其檢查)
  • 保證返回客戶端(調(diào)用)的代碼的時(shí)候是完全初始化的狀態(tài)
  • 避免了循環(huán)依賴
  • 提升了代碼的可復(fù)用性

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • SpringBoot導(dǎo)入導(dǎo)出數(shù)據(jù)實(shí)現(xiàn)方法詳解

    SpringBoot導(dǎo)入導(dǎo)出數(shù)據(jù)實(shí)現(xiàn)方法詳解

    這篇文章主要介紹了SpringBoot導(dǎo)入導(dǎo)出數(shù)據(jù)實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2022-12-12
  • Java lombok中@Accessors注解三個(gè)屬性的作用

    Java lombok中@Accessors注解三個(gè)屬性的作用

    這篇文章主要介紹了Java?lombok的@Accessors注解屬性解析,該注解主要作用是:當(dāng)屬性字段在生成?getter?和?setter?方法時(shí),做一些相關(guān)的設(shè)置,需要的朋友可以參考下
    2023-05-05
  • SpringBoot自帶模板引擎Thymeleaf使用示例詳解

    SpringBoot自帶模板引擎Thymeleaf使用示例詳解

    Thymeleaf是一款用于渲染XML/HTML5內(nèi)容的模板引擎,類似JSP,它可以輕易的與SpringMVC等Web框架進(jìn)行集成作為Web應(yīng)用的模板引擎,本文給大家介紹SpringBoot自帶模板引擎Thymeleaf使用示例,感興趣的朋友一起看看吧
    2023-12-12
  • Java HashMap在遍歷時(shí)刪除元素的實(shí)現(xiàn)

    Java HashMap在遍歷時(shí)刪除元素的實(shí)現(xiàn)

    本文主要介紹了Java HashMap在遍歷時(shí)刪除元素的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-12-12
  • MyBatis配置文件解析與MyBatis實(shí)例演示

    MyBatis配置文件解析與MyBatis實(shí)例演示

    這篇文章主要介紹了MyBatis配置文件解析與MyBatis實(shí)例演示以及怎樣編譯安裝MyBatis,需要的朋友可以參考下
    2022-04-04
  • Java中@RestController注解使用

    Java中@RestController注解使用

    在Spring框架中,@RestController注解是一個(gè)非常重要的注解,它用于將一個(gè)類標(biāo)記為RESTful風(fēng)格的控制器,本文就來介紹一下Java中@RestController注解使用,感興趣的可以了解一下
    2023-11-11
  • java 多態(tài)與抽象類詳解總結(jié)

    java 多態(tài)與抽象類詳解總結(jié)

    在面向?qū)ο蟮母拍钪?,所有的對象都是通過類來描繪的,但是反過來,并不是所有的類都是用來描繪對象的,如果一個(gè)類中沒有包含足夠的信息來描繪一個(gè)具體的對象,這樣的類就是抽象類,而多態(tài)是同一個(gè)行為具有多個(gè)不同表現(xiàn)形式或形態(tài)的能力
    2021-11-11
  • java Spring AOP詳解及簡單實(shí)例

    java Spring AOP詳解及簡單實(shí)例

    這篇文章主要介紹了java Spring AOP詳解及簡單實(shí)例的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • IDEA自帶Maven插件找不到settings.xml配置文件

    IDEA自帶Maven插件找不到settings.xml配置文件

    IDEA自帶了Maven插件,最近發(fā)現(xiàn)了一個(gè)問題,IDEA自帶Maven插件找不到settings.xml配置文件,本文就來詳細(xì)的介紹一下解決方法,感興趣的可以了解一下
    2023-11-11
  • Java項(xiàng)目打包發(fā)布到maven私倉常見的幾種方式

    Java項(xiàng)目打包發(fā)布到maven私倉常見的幾種方式

    這篇文章主要介紹了項(xiàng)目打包發(fā)布到maven私倉常見的幾種方式,幫助大家更好的理解和學(xué)習(xí)使用Java,感興趣的朋友可以了解下
    2021-03-03

最新評論