1. 程式人生 > >[轉]開源框架Spring詳解---IoC的深刻理解

[轉]開源框架Spring詳解---IoC的深刻理解

有一段時間沒有接觸spring了,感覺有點陌生了,今天總結了一下關於IoC的一些知識點,雖然是學過spring了,但是如果不經常使用,知識點是連線不起來的。所以今天我特意做了這個總結。相信對大家有一定的幫助。以便我們可以共同學習,共同進步。

Ioc的理解

1、依賴注入的概念

spring兩個核心概念:一個是控制反轉IoC,也可以叫做依賴注入DI。還有一個是面向切面程式設計AOP

控制反轉:當某個java物件需要(依賴)另一個java物件時,不是自身直接建立依賴物件,而是由實現IoC的容器(如spring框架的IoC容器)來建立,並將它注入需要這個依賴物件的java物件中。

2spring

的依賴注入

2.1、構造器注入

<bean id="accoutDaoImpl" class="cn.csdn.dao.AccoutDaoImpl" scope=”singleton”/>

<bean id="accoutServicImpl" class="cn.csdn.service.AccoutServicImpl" scope=”">

<!--構造器注入方式-->

<constructor-arg ref="accoutDaoImpl"/>

</bean>

2.2、設值(set方法)注入

<bean id="accountDaoImpl" class="cn.csdn.dao.AccoutDaoImpl"/>

<bean id="accoutServicImpl" class="cn.csdn.service.AccoutServicImpl">

<!--設值(set方法)注入-->

<property name="accountDaoImpl" ref="accoutDaoImpl"/>

</bean>

3spring的容器

spring管理的基本單元是Bean,在spring的應用中,所以的元件都是一個個的Bean,它可以是任何的java物件。spring負責建立這些Bean的例項。並管理生命週期。而spring框架是通過其內建的容器來完成Bean

的管理的,Beanspring的容器中生存著,使用時只需要通過它提供的一些方法從其中獲取即可

spring的容器有兩個介面:BeanFactory ApplicationContext這兩個介面的例項被陳為spring的上下文。

ApplicationContext ac = new ClassFathXmlApplicationContext("app*.xml");

AccountService accountService = (AccountService)ac.getBean("accountServiceImpl");

4、使用xml裝配Bean

4.1、裝配Bean

id:指定該Bean的唯一標識。

class:指定該Bean的全限定名。

name:為該Bean指定一到多個別名。多個別名可以用“,”和“;”分割。

autowire:指定該Bean的屬性的裝配方式。

scope:指定該Bean的存在。

init-method:指定該Bean的初始化方法。

destroy-method:指定該Bean的銷燬方法。

abstract:指定該Bean是否為抽象的。如果是抽象的,則spring不為它建立例項。

parent:指定該Bean的父類標誌或別名。

4.2、裝配Bean的各種型別屬性值

1>.簡單型別屬性值的裝配

<bean id="bean1" class="cn.csdn.domain.Bean1">

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

<property name="age">

<value>22</value>

</property>

</bean>

2>.引用其他Bean的裝配

<bean id="bean1" class="cn.csdn.domain.Bean1">

...

</bean>

<bean id="bean2" class="cn.csdn.domain.Bean2">

<!--引用自其他Bean的裝配-->

<property name="bean1" ref="bean1"/>

</bean>

另外一種不常使用的配置方式是在property元素中嵌入一個bean元素來指定所引用的Bean.

<bean id="bean1" class="cn.csdn.domain.Bean1">

...

</bean>

<bean id="bean2" class="cn.csdn.domain.Bean2">

<!--引用自其他Bean的裝配-->

<property name="bean1">

<bean id="bean1" class="cn.csdn.domain.Bean1"/>

</property>

</bean>

4.3、自動裝配

no:不使用自動裝配。必須通過ref元素指定依賴,這是預設設定。由於顯式指

定協作者可以使配置更靈活、更清晰,因此對於較大的部署配置,推薦採用該設定。而且在某種程度上,它也是系統架構的一種文件形式。

<bean id="bean1" class="cn.csdn.service.Bean1" scope="singleton">

<property name="studentDaoImpl" ref="studentDaoImpl">

</property>

</bean>

備註:有property屬性指定ref

byName:根據屬性名自動裝配。此選項將檢查容器並根據名字查詢與屬性完全一致的bean,並將其與屬性自動裝配。例如,在bean定義中將autowire設定為by name,而該bean包含master屬性(同時提供setMaster(..)方法),Spring就會查詢名為masterbean定義,並用它來裝配給master屬性。

<bean id="bean1" class="cn.csdn.service.Bean1" scope="singleton"autowire="byName"/> 

備註:沒有property屬性

byType:如果容器中存在一個與指定屬性型別相同的bean,那麼將與該屬性自動裝配。如果存在多個該型別的bean,那麼將會丟擲異常,並指出不能使用byType方式進行自動裝配。若沒有找到相匹配的bean,則什麼事都不發生,屬性也不會被設定。如果你不希望這樣,那麼可以通過設定dependency-check="objects"Spring丟擲異常。

備註:spring3.0以上不拋異常。

<bean id="bean1" class="cn.csdn.service.Bean1" scope="singleton"autowire="byType"/> 

備註:沒有property屬性

Constructor:byType的方式類似,不同之處在於它應用於構造器引數。如果

在容器中沒有找到與構造器引數型別一致的bean,那麼將會丟擲異常。

<bean id="bean1" class="cn.csdn.service.Bean1" scope="singleton"autowire="constructor"/> 

備註:沒有property屬性

autodetect:通過bean類的自省機制(introspection)來決定是使用constructor還是byType方式進行自動裝配。如果發現預設的構造器,那麼將使用byType方式。

<bean id="bean1" class="cn.csdn.service.Bean1" scope="singleton"autowire="autodetect"/>

4.4、指定Bean的存在範圍

singleton:在每個Spring IoC容器中一個bean定義對應一個物件例項。這是預設值

prototype:每次對Bean請求時都會建立一個Bean定義對應一個例項。一個Bean定義多個例項。

request:在一次HTTP請求中,一個bean定義對應一個例項;即每次HTTP請求將會有各自的bean例項,它們依據某個bean定義建立而成。該作用域僅在基於webSpring ApplicationContext情形下有效。

session:在一個HTTP Session中,一個bean定義對應一個例項。該作用域僅在基於webSpring ApplicationContext情形下有效。

global_session:在一個全域性的HTTP Session中,一個bean定義對應一個例項。

典型情況下,僅在使用portlet context的時候有效。該作用域僅在基於webSpring ApplicationContext情形下有效。

4.5、指定Bean的初始化和銷燬

Spring可以管理Bean例項在例項化結束之後和被銷燬之前的行為。通過propertyinit-method屬性可以指定某個方法應該在Bean全部依賴關係設定結束後自動執行;通過propertydestroy-method屬性可以指定某個方法應該在Bean被銷燬之前自動執行。

public class Bean{

public String name;

public Bean(){

system.out.println(“呼叫預設構造方法”);

}

public void setName(){

system.out.println(“執行setName()方法”);

this.name=name;

}

public String getName(){

return name;

}

public void init(){

system.out.println(“執行初始化方法”);

}

public void destroy(){

system.out.println(“執行銷燬方法”);

}

}

配置檔案

<bean id=”bean1” class=”cn.csdn.service.Bean1” scope=”singleton”init-method=”init” destroy-method=”destroy”>

<property name=”name” value=”z_xiaofei168/>”

</bean>

執行結果:

呼叫預設構造方法

執行setName()方法

執行初始化方法

4.6、裝配Bean的繼承

如果兩個Bean的屬性裝配資訊很相似,那麼可以利用繼承來減少重複的配置工作。

<!--裝配Bean的繼承

父類作為模板,不需要例項化,設定abstract=”true”-->

`                <bean id=”parent” class=”cn.csdn.service.Parent” abstract=”true”>

<property name=”name” value=”z_xiaofei168”/>

<property name=”pass” value=”z_xiaofei168”/>

</bean>

<!--裝配Bean的繼承

子類中用parent屬性指定父類標識或別名

子類可以覆蓋父類的屬性裝配,也可以新增自己的屬性裝配-->

`                <bean id=”child” class=”cn.csdn.service.Chlid” parent=”parent”>

<property name=”pass” value=”123123”/>

<property name=”age” value=”22”/>

</bean>

相關推薦

[]開源框架Spring---IoC深刻理解

有一段時間沒有接觸spring了,感覺有點陌生了,今天總結了一下關於IoC的一些知識點,雖然是學過spring了,但是如果不經常使用,知識點是連線不起來的。所以今天我特意做了這個總結。相信對大家有一定的幫助。以便我們可以共同學習,共同進步。 Ioc的理解 1、依賴注入的概念 spring的兩個核心概念:一個

】Quartz.net開源作業調度框架使用

詳解 des 關於 utc ogg knowledge imp common dem 轉自:http://www.cnblogs.com/knowledgesea/p/4930469.html 前言 quartz.net作業調度框架是偉大組織OpenSymphony開發的q

Spring(二)------IOC控制反轉

tsp name 調試 的人 好的 turn 同時 eth 時機   我相信提到 Spring,很多人會脫口而出IOC(控制反轉)、DI(依賴註入)、AOP等等概念,這些概念也是面試官經常問到的知識點。那麽這篇博客我們就來詳細的講解 IOC控制反轉。   ps:本篇博客源

Spring框架Aop

urn 項目 aop mil execution 有一個 dal 例如 cati 一.前言 在以前的項目中,很少去關註spring aop的具體實現與理論,只是簡單了解了一下什麽是aop具體怎麽用,看到了一篇博文寫得還不錯,就轉載來學習一下,博文地址:http://

Spring篇之IoC控制反轉

###一.Spring概況 spring是一個開源框架 是一個輕量的控制反轉和麵向切面的容器框架 大小和開銷都是輕量的。 通過控制反轉技術可以達到鬆耦合的目的 切面程式設計,允許通過分離應用的業務邏輯。 包含並管理應用物件的配置和生命週期,是一個容器,並且能夠組

SpringIOC和AOP)

Spring框架—控制反轉(IOC) 1 Spring框架概述 1.1 什麼是Spring Spring是一個開源框架,Spring是於2003 年興起的一個輕量級的Java 開發框架,由Rod Johnson 在其著作Expert One-On-One J2EE

IOC、AOP——Spring

先來說一下書面表達:   IOC(控制反轉):Ioc—Inversion of Control,即“控制反轉”,不是什麼技術,而是一種設計思想,    IOC可以在本專案中發現,當我們需要增加新的功能的時候,就可以通過介面的另外的實現類,實現功能新增的作用,極大的   

Spring4.X + Spring MVC + Mybatis3 零配置應用開發框架搭建 (3)

Spring4.X + Spring MVC + Mybatis3 零配置應用開發框架搭建詳解(3) - 實現最基本的登入處理 1. 基本架構:         基礎框架搭建完成後,我們開始進行Spring + SpringMVC + Mybatis的整合,來完成登入功能的

Spring (二):IOC 和DI

1 IOC 理解 Ioc—Inversion of Control,即“控制反轉”,不是什麼技術,而是一種設計思想。在Java開發中,Ioc意味著將你設計好的物件交給容器控制,而不是傳統的在你的物件內部直接控制。 IoC不是一種技術,只是一種思想,一個重要的面向物件程式設計的法則,它

JAVAWEB開發之Spring之——Spring的入門以及IOC容器裝配Bean(xml和註解的方式)、Spring整合web開發、整合Junit4測試

public class BeanFactory{    public UserService getUserService(){         // 反射+配置檔案        return Class.forName(類名).newInStance();     } } xml、pro

[] angular2-highcharts用法

ppc tip option select sel nbsp 用法詳解 points ttr 1、 使用npm安裝angular2-highcharts npm install angular2-highcharts --save 2、主模塊中引入 app.module.t

-Linux啟動過程(inittab、rc.sysinit、rcX.d、rc.local)

dha mage 模塊 都是 交換 如何配置 mas 完全 打開 http://blog.chinaunix.net/space.php?uid=10167808&do=blog&id=26042 1)BIOS自檢2)啟動Grub/Lilo3)加載內

Spring(五)------AOP

利用 未來 bject ted r.java -c cti throw 位置   這章我們接著講 Spring 的核心概念---AOP,這也是 Spring 框架中最為核心的一個概念。   PS:本篇博客源碼下載鏈接:http://pan.baidu.com/s/1skZ

Spring(七)------事務管理

測試 編寫 oca 結果 文件中 查看數據庫 模型 9.png supported   PS:本篇博客源碼下載鏈接:http://pan.baidu.com/s/1mi3NhX2 密碼:3io2 1、事務介紹   事務(Transaction),一般是指要做的或所做的事

()oracle視圖

子句 col 安全性 沒有 pil 重新編譯 語法錯誤 相關 his Oracle視圖詳解 一. 視圖的定義 視圖(view),也稱虛表, 不占用物理空間,這個也是相對概念,因為視圖本身的定義語句還是要存儲在數據字典裏的。視圖只有邏輯定義。每次使用的時候,只是重新執行S

()MyISAM Key Cache及優化

磁盤 詳解 update 根據 進行 緩沖 write 隊列 但是 原文:http://huanghualiang.blog.51cto.com/6782683/1372721 一、MyISAM Key Cache詳解: 為了最小化磁盤I/O,MyISAM將最頻繁訪問的索引

iOS自動布局框架-Masonry

asc github上 區分 block line 優先級 關鍵字 二次 con 目前iOS開發中大多數頁面都已經開始使用Interface Builder的方式進行UI開發了,但是在一些變化比較復雜的頁面,還是需要通過代碼來進行UI開發的。而且有很多比較老的項目,本身就還

】Selenium-xpath

input end tab UC 子元素 dom 絕對路徑 sele .class 1、XPATH是什麽 XPATH是一門在XML文檔中查找信息的語言,XPATH可用來在XML文檔中對元素和屬性進行遍歷,主流的瀏覽器都支持XPATH,因為HTML頁面在DOM中表示為XHT

ssh-keygen 的

keyword mod 不用 conf keygen 漏洞 continue sin 不支持 為了讓兩個linux機器之間使用ssh不需要用戶名和密碼。所以采用了數字簽名RSA或者DSA來完成這個操作。 模型分析 假設 A (192.168.20.59)為客戶機器,B

python3開發進階-Django框架

本質 負責 log 生命周期 target 了解 定制 基本 del 一、MVC框架和MTV框架 MVC,全名是Model View Controller,是軟件工程中的一種軟件架構模式,把軟件系統分為三個基本部分: 模型(Model)、視圖(View)和控制器(Con