1. 程式人生 > >Spring4學習筆記----Spring的依賴注入詳解

Spring4學習筆記----Spring的依賴注入詳解

Spring是一個IOCAOP容器,Spring是非侵入型的,基於Spring開發的web應用中的物件可以不依賴SpringAPI.

IOC:依賴注入 (讓Spring Bean以配置檔案的形式組織在一起)

所謂依賴注入:在程式執行過程中,如需要另外一個物件協作(呼叫他的屬性、方法),無需在程式碼中建立該被調物件,而是依賴外部容器的注入。

一、Spring容器

1

Spring容器是Bean例項的工廠,並管理容器中的Bean

Spring容器有兩個核心介面:BeanFactoryApplicationContext,其中ApplicationContextBeanFactory的子介面。它們都可以代表

Spring容器。

BeanSpring容器的基本單位,在基於SpringJavaEE應用中,所有的元件都被當成Bean處理,任何的java物件、java元件都被當成Bean處理,這些元件並不是標準的javabean.

2

BeanFactory負責配置、建立、管理Bean,還負責管理BeanBean之間的依賴關係。

ApplicationContextBeanFactory的子介面,作為Spring容器更方便。

二、Spring的核心機制:依賴注入

   依賴注入是目前最優秀的解耦方式,依賴注入讓SpringBean以配置檔案組織在一起,而不是以編碼的方式耦合在一起。

   所謂依賴注入:在程式執行過程中,如需要另外一個物件協作(呼叫他的屬性、方法),無需在程式碼中建立該被調物件,而是依賴外部容器的注入。

依賴注入:在Springxml配置檔案中

Id:指定Bean的唯一標識,程式通過id屬性值來訪問Bean例項

class:指定Bean的實現類

二、依賴注入方式:

(1)屬性注入

        <bean id="xx" class="">

<property name=""></property>

</bean>

(2)構造器注入

     建構函式注入;(通過型別;通過索引;聯合使用)

<bean id="xx" class="">

<constructor-arg type="" value=""></constructor-arg>

</bean>

<bean id="xx" class="">

<constructor-arg index="" value=""></constructor-arg>

</bean>

(3)工廠方法注入;(非靜態工廠,靜態工廠)

非靜態工廠:

<!-- 裝配工廠bean -->

<bean id="serviceFactory" class="xx.xxx.ServiceFactory"></bean>

<!-- 工廠createXxx() 方法返回 xxxService 物件 -->

<bean id="xxxService" factory-bean="serviceFactory" factory-method="createXxx" >

</bean>

靜態工廠:

<!-- 工廠createXxx() 方法返回 xxxService 物件 -->

<bean id="xxxService" class="xx.xxx.ServiceFactory" factory-method="createXxx" >

</bean>

(4)泛型依賴注入;

三:注入引數

(1)注入基本型別:

<bean id="xx" class="">

<property name=""></property>

</bean>

(2)注入bean(注入的屬性為引用型別使用ref)

<bean id="people1" class="com.bean.People">

<property name="name" value="wendy"></property>

<property name=" idCard " ref=" idCard 1"></property>

</bean>

<bean id="idCard1" class="com.bean. IDCard "></bean>

(3)內部bean(即該bean物件只屬於父類bean)

Bean 例項僅僅給一個特定的屬性使用時, 可以將其宣告為內部 Bean. 內部 Bean 宣告直接包含在 <property> <constructor-arg> 元素裡, 不需要設定任何 id name 屬性,內部 Bean 不能使用在任何其他地方

<bean id=" idCard 2" class="com.bean. IDCard  ">

<property name="name" value="wendy"></property>

<property name=" idCard ">

<bean class="com.bean. IDCard ">

<property name="" value=""></property>

</bean>

</property>

</bean>

(4)null

可以使用專用的 <null/> 元素標籤為 Bean 的字串或其它物件型別的屬性注入 null

<bean id="people2" class="com.bean.People">

<property name="name" value="tom"></property>

<property name=" idCard ">

<null></null>

</property>

</bean>

(5)級聯屬性(注入屬性的屬性)

<bean id="people3" class="com.bean.People">

<property name="name" value="李四"></property>

<!-- 前提是People中的IDCard物件已經建立 -->

<property name="idCard.number" value=""></property>

<property name="idCard.address" value=""></property>

</bean>

(6)集合型別屬性(注入的屬性有多個值,用list)

<bean id="people4" class="com.bean.People">

<property name="name" value="張三"></property>

<property name="hobbies">

<list>

<value>唱歌</value>

<value>跳舞</value>

</list>

</property>

</bean>

(注入的屬性為key-value形式

<bean id="people5" class="com.bean.People">

<property name="pname" value="張三"></property>

<property name="works">

<map>

<entry>

<key><value>上午</value></key>

<value>寫程式碼</value>

</entry>

<entry>

<key><value>下午</value></key>

<value>看電影</value>

</entry>

</map>

</property>

</bean>

Properties屬性

<bean id="people6" class="com.bean.People">

<property name="name" value="張三"></property>

<property name="properties">

<props>

<prop key=""></prop>

<prop key=""></prop>

</props>

</property>

</bean>


相關推薦

Spring4學習筆記----Spring依賴注入

Spring是一個IOC和AOP容器,Spring是非侵入型的,基於Spring開發的web應用中的物件可以不依賴Spring的API. IOC:依賴注入 (讓Spring Bean以配置檔案的形式組織在一起) 所謂依賴注入:在程式執行過程中,如需要另外一個物件協作(呼叫

Spring 學習筆記 - IOC/依賴注入

簡述: Spring 學習 - IOC/依賴注入 1. Bean 的例項化 1) 直接使用原始類建立bean <bean id="exampleBean" class="com.anialy.test.ExampleBean" /> 2) 使用工廠方法建立

Hadoop學習筆記:MapReduce框架

object 好的 單點故障 提高 apr copy 普通 exce 代表性 開始聊mapreduce,mapreduce是hadoop的計算框架,我學hadoop是從hive開始入手,再到hdfs,當我學習hdfs時候,就感覺到hdfs和mapreduce關系的緊密。這個

jvm學習筆記之對象

時間 分代 創建 com 詳解 要求 技術 wid src 一、對象的組成            對象頭(Header):           運行時數據:存儲對象運行時的數據,如哈希碼、GC分代年齡、鎖狀態標誌、線程持有的鎖、偏向線程ID、偏向時間戳等,這部分數據官方成為

Java學習筆記54(反射

pos code 重名 java學習筆記 spl catch 兩種 new fig 反射概念: java反射機制是在運行狀態中,對於任意一個類,都能知道所有屬性和方法 對於任意一個對象都能調用它的任意一個方法和屬性,這種動態獲取和調用的功能稱為java的反射機制 實際作

struts2框架學習筆記2:配置

true class 規範 開發規範 刪除用戶 建議 類名 esp 需要 核心配置文件: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Soft

Memcached學習筆記之三:MemCached原理

memcached是一個高效能的分散式記憶體快取伺服器,memcached在Linux上可以通過yum命令安裝,這樣方便很多,在生產環境下建議用Linux系統,memcached使用libevent這個庫在Linux系統上才能發揮它的高效能。它的分散式其實在服務端是不具有分散式的特徵的,是依靠客戶端

Angular學習筆記3--依賴注入

基本用法 1.建立服務 ng g service product/product 2.編寫服務 getProduct(): Product { return new Product('123', 'productName') } getProduct(): Product {

前端 學習筆記(二) http

以前看到有關http的東西,我都會繞過去,決定這東西沒太大用處。現在既然決定成為一名優秀的web前端工程師,那麼這個時候就應該知難而不退。 一、什麼是HTTP協議? HTTP是Hyper Text Transport Protocol的縮寫,望文知意便是 超

Java學習筆記03--main方法;單例設計模式;繼承;instanceof 關鍵字

===============java相關講解============= main函式的詳解: public : 公共的。 許可權是最大,在任何情況下都可以訪問。 原因: 為了保證讓jvm在任何情況下都可以訪問到main方法。 st

SpringBoot 學習筆記二 配置檔案

在建立SpringBoot專案時,工程會自動建立一個application.properties,或者application.yml,兩種檔案格式都支援,這裡用application.yml,加入以下配置,注意空格 1. 引入依賴 &

Flume學習筆記及配置引數

一、什麼是flume Flume是一個高可用的,高可靠的,分散式的海量日誌採集、聚合和傳輸的系統,Flume支援在日誌系統中定製各類資料傳送方,用於收集資料;同時,Flume提供對資料進行簡單處理,並寫到各種資料接受方(可定製)的能力。 二、flume特點 flume的資料

樹莓派學習筆記——wiringPi GPIO使用

2.BCM2835 GPIO相關暫存器    (該部分表述可能有誤,正在確認修改中)    樹莓派平臺的GPIO驅動,例如RPi.GPIO和WiringPi均採用直接操作GPIO暫存器的方式,樹莓派的CPU採用博通的BCM2835,想要更好的瞭解樹莓派的GPIO驅動實現就必須閱讀BCM2835的資料手冊。在B

cocos2d-x學習筆記-CCMenu和CCMenuItem

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

學習筆記】Log4j.properties

一、Log4j簡介 Log4j有三個主要的元件:Loggers(記錄器),Appenders (輸出源)和Layouts(佈局)。這裡可簡單理解為日誌類別,日誌要輸出的地方和日誌以何種形式輸出。綜合使用這三個元件可以輕鬆地記錄資訊的型別和級別,並可以在執行時控制日誌輸出

Android程式設計學習筆記 之 ListActivity原始碼

前言 最近在研究PreferenceActivity發現是繼承自ListActivity的,開啟看了下ListActivity的原始碼,發現也不長,就詳細閱讀認識一下。 正文 ListActi

演算法學習筆記:連通圖

## 什麼是連通圖 ? 在圖論中,連通圖基於連通的概念。在一個無向圖 G 中,若從頂點 $i$ 到頂點 $j$ 有路徑相連(當然從 $j$ 到 $i$ 也一定有路徑),則稱 $i$ 和 $j$ 是連通的。如果 G 是有向圖,那麼連線 $i$ 和j的路徑中所有的邊都必須同向。如果圖中任意兩點都是連通的,那麼

演算法學習筆記:母函式

## 引言 **母函式**(Generating function,**生成函式**)是**組合數學**中一種重要的方法,這裡只對最簡單的普通母函式作簡單介紹。其主要思想是,把離散序列和**冪級數**對應起來。 先來看一個最經典的例子:給你1克、2克、3克、4克的砝碼各一枚,問稱出1~10克的方案分別有多

Spring學習筆記——Spring Scope(作用域)

引言 在Spring學習筆記 —— 從IOC說起中,曾經提到過Spring中的Bean是根據Scope(作用域)來生成的,但是一直都沒有詳細解釋過,除了Singleton(單例)和prototype(原型)作用域之外,另外一種重要的作用域——使用者自定義

Spring IOC原始碼之容器依賴注入

進入BeanWrapperImpl public class BeanWrapperImpl extends AbstractNestablePropertyAccessor implements BeanWrapper BeanWrapperImpl繼承了AbstractNestablePropert