黄色网址大全免费-黄色网址你懂得-黄色网址你懂的-黄色网址有那些-免费超爽视频-免费大片黄国产在线观看

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節(jié)點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 hot資訊 詳解Spring注入bean的幾種方式

詳解Spring注入bean的幾種方式

更新時間:2021-09-10 10:41:24 來源:動力節(jié)點 瀏覽1573次

首先,要學習Spring中的Bean的注入方式,就要先了解什么是依賴注入。依賴注入是指:讓調用類對某一接口的實現(xiàn)類的實現(xiàn)類的依賴關系由第三方注入,以此來消除調用類對某一接口實現(xiàn)類的依賴。

Spring容器中支持的依賴注入方式主要有屬性注入、構造函數(shù)注入、工廠方法注入。接下來將為大家詳細介紹這三種依賴注入的方式以及它們的具體配置方法。

1.屬性注入

屬性注入即通過setXXX( )方法注入bean的屬性值或依賴對象。由于屬性注入方式具有可選擇性和靈活性高的特點,因此它也是實際開發(fā)中最常用的注入方式。

Spring首先會調用bean的默認構造函數(shù)實例化bean對象,然后再通過反射的方法調用set方法來注入屬性值。

屬性注入要求bean提供一個默認的構造函數(shù) ,并且得為需要注入的屬性提供 set方法 。

TIps:所謂默認的構造函數(shù),即不帶參數(shù)的構造函數(shù)。如果類中沒有自定義任何構造函數(shù),則系統(tǒng)(JVM)會自動生成一個不帶參的默認構造函數(shù),如果類中顯式的自定義了有參數(shù)的構造函數(shù),則系統(tǒng)就不會在自動生成默認構造函數(shù),需要自己手動再加一個無參的構造函數(shù)。

下面通過一個實例來演示Spring中bean的屬性注入方式:

編寫一個user類:

package com.Kevin.bean;
/**
 * 創(chuàng)建一個類測試bean的屬性注入方式
 * @author Kevin
 *
 */
public class User {  
  private String username;
  public String getUsername() {
    return username;
  } 
  public void setUsername(String username) {
    this.username = username;
  }
}

配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="
    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <!-- bean definitions here --> 
  <!-- 配置對象 -->
  <bean id="user" class="com.Kevin.bean.User">
    <property name="username">
      <value>Kevin</value>
    </property>
  </bean>  
</beans>

其中,每個屬性值對應一個property標簽,name屬性值為類中屬性的名稱。在bean實現(xiàn)類中擁有與其對應的實現(xiàn)方法setUsername( )。

Tips:Spring只會檢查bean中是否含有setter方法,而對是否有對應的屬性變量則不作具體要求,但按照約定俗成的規(guī)則我們最好為其設定相應的屬性變量。

Spring中<property>標簽的命名規(guī)范:

Spring的<property>標簽所指定的屬性名稱和bean實現(xiàn)類的setter方法滿足Sun JavaBean的屬性命名規(guī)范,即XXX的屬性對應setXXX( )的方法。

一般情況下,java的屬性變量名都以小寫字母開頭,但考慮到一些特殊意義的英文縮略詞,java bean也允許一些大寫字母開頭的變量名。但必須滿足以下兩點:

變量的前兩個字母要么全部大寫,要么全部小寫;

但以一般編程習慣來說,屬性名最好全部使用小寫字母,方便編程和閱讀。

對于屬性注入方式來說,只能人為的在配置文件中提供保證,而無法在語法級別提供保證。此時就需要使用構造函數(shù)注入這種方式,以此來更好的滿足要求。

2.構造函數(shù)注入

構造函數(shù)注入是除屬性注入之外的另一種常用的注入方式,它可以保證一些必要的屬性在bean實例化時就得到了設置,并在實例化后就可以使用。

使用構造函數(shù)注入的前提是: bean必須提供帶參的構造函數(shù)。

對于構造函數(shù)的注入,配置文件可以有以下幾種方式:

按類型匹配入參

按索引匹配入參

聯(lián)合使用類型和索引匹配入參

通過自身類型反射匹配入參

3.工廠方法注入

工廠方法是應用中被經常使用的設計模式,也是控制反轉和單實例設計思想的主要實現(xiàn)方法。工廠類負責創(chuàng)建一個或多個工廠類實例,工廠類方法一般以接口或抽象類變量的形式返回目標類實例。

工廠類對外屏蔽了目標類的實例化步驟,調用者甚至根本不用指定具體的目標類是什么。由于Spring容器以框架的方法提供工廠方法的功能,并以透明的方式開放給開發(fā)者。因此很少需要手工編寫工程方法。但在一些遺留系統(tǒng)或第三方類庫中還是會碰到工程方法,此時便可以使用Spring工廠注入的方法來進行Spring的注入。

Spring工廠注入的方法可以分為靜態(tài)和非靜態(tài)兩種。

(1)非靜態(tài)工廠方法

有些工廠方法是非靜態(tài)的,必須實例化工廠類之后才能調用工廠方法。下面通過一個實例來演示。

編寫工廠類:

package com.Kevin.factorybean;
/**
 * 編寫工廠類測試非靜態(tài)工廠方法注入
 * @author Kevin
 *
 */ 
public class BookFactory {
  public Book buyBook(){
    Book book = new Book();
    book.setName("Think in Java");
    return book;
  }
}

配置文件編寫:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="
    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <!-- bean definitions here --> 
  <!-- 配置對象 -->
  <bean id="bookFactory" class="com.Kevin.factorybean.BookFactory"></bean>
  <bean id="book" factory-bean="bookFactory" factory-method="buyBook"></bean>
  </beans>

由于bookFactory的工廠方法不是靜態(tài)的,因此需要先定義一個工廠類的bean,然后通過 factory-bean 屬性來引用工廠bean實例。再通過屬性 factory-method 來指定對應的工廠方法。

(2)靜態(tài)工廠方法

很多工廠類方法都是靜態(tài)的,這意味著無需創(chuàng)建工廠類實例的情況下就可以調用工廠類方法。因此靜態(tài)工程方法比非靜態(tài)工廠方法的調用更加方便簡潔。下面通過一個實例來演示靜態(tài)工廠方法。

編寫factory類:

package com.Kevin.factorybean;
/**
 * 編寫工廠類測試靜態(tài)工廠方法注入
 * @author Kevin
 *
 */
public class CarFactory {
  public static Car createCar(){
    Car car = new Car();
    car.setBrand("Lamborghini");
    return car;
  }
}

編寫配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="
    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <!-- bean definitions here -->
  <!-- 配置對象 -->
  <bean id="car" class="com.Kevin.factorybean.Car" factory-method="createCar"></bean>  
</beans>

總結

Spring提供了三種可供選擇的注入方式,但在實際應用中,我們究竟該選擇哪種注入方式,并沒有統(tǒng)一的標準,如下是一些可以參考的理由:

構造函數(shù)注入理由:

構造函數(shù)保證重要屬性預先設置;

無需提供每個屬性的setter方法,減少類的方法個數(shù);

可以更好地封裝類變量,避免外部錯誤調用。

屬性注入理由:

屬性過多時,構造函數(shù)變的臃腫;

構造函數(shù)注入靈活性不強,有時需要為屬性注入null值;

多個構造函數(shù)時,配置上產生歧義,復雜度升高;

構造函數(shù)不利于類的繼承和擴展;

構造函數(shù)注入會引起循環(huán)依賴的問題。

其實Spring為我們注入參數(shù)提供了這么多方法,那么這些方法必然有他們存在的道理,每個方法在某一問題上會有獨特的優(yōu)勢,我們只需要按照我們具體的使用需求選擇適合的方法來使用就好了,但一般不太推薦工廠方法注入。

以上就是動力節(jié)點小編介紹的"詳解Spring注入bean的幾種方式",希望對大家有幫助,想了解更多可查看Spring框架教程。動力節(jié)點在線學習教程,針對沒有任何Java基礎的讀者學習,讓你從入門到精通,主要介紹了一些Java基礎的核心知識,讓同學們更好更方便的學習和了解Java編程,感興趣的同學可以關注一下。

提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 中文字幕一区二区三区 精品 | 日韩高清在线观看 | 色噜噜狠狠狠狠色综合久不 | 成人午夜视频在线观看 | 日日夜夜天天干 | 国产不卡免费 | 精品欧美一区二区在线看片 | 一级黄色片一级黄色片 | 亚洲欧美日本国产综合在线 | 欧美一区二区三区在线可观看 | 日本欧美强乱视频在线 | 成 人 黄 色 激 情视频网站 | 亚洲欧美视频网站 | 在线观看网址你懂的 | 日韩欧美国产综合 | 欧美14一15sex性hd | 激情综合网五月 | 亚洲国产日韩在线观看 | 中国毛片在线观看 | 中国xxxx真实自拍hd | 欧美在线暴力性xxxx | 在线成人福利 | 日日综合网 | 在线成人免费看大片 | 国产一级毛片午夜福 | 天天做天天看夜夜爽毛片 | 国产成人精品久久亚洲高清不卡 | 黄色一级片在线看 | 国内在线观看精品免费视频 | 在线看a级片 | 精品欧美一区二区三区精品久久 | bbbb在线视频播放 | 永久免费在线视频 | 香蕉视频黄色软件 | 深夜免费看片 | 99视频精品全部国产盗摄视频 | 中文字幕亚洲视频 | 日日操日日舔 | 91桃色国产线观看免费 | 亚洲欧洲日本在线 | 国产精品视频第一页 |