[轉]開源框架Spring詳解---IoC的深刻理解
有一段時間沒有接觸spring了,感覺有點陌生了,今天總結了一下關於IoC的一些知識點,雖然是學過spring了,但是如果不經常使用,知識點是連線不起來的。所以今天我特意做了這個總結。相信對大家有一定的幫助。以便我們可以共同學習,共同進步。
Ioc的理解
1、依賴注入的概念
spring的兩個核心概念:一個是控制反轉IoC,也可以叫做依賴注入DI。還有一個是面向切面程式設計AOP。
控制反轉:當某個java物件需要(依賴)另一個java物件時,不是自身直接建立依賴物件,而是由實現IoC的容器(如spring框架的IoC容器)來建立,並將它注入需要這個依賴物件的java物件中。
2、spring
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>
3、spring的容器
spring管理的基本單元是Bean,在spring的應用中,所以的元件都是一個個的Bean,它可以是任何的java物件。spring負責建立這些Bean的例項。並管理生命週期。而spring框架是通過其內建的容器來完成Bean
。
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就會查詢名為master的bean定義,並用它來裝配給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定義建立而成。該作用域僅在基於web的Spring ApplicationContext情形下有效。
session:在一個HTTP Session中,一個bean定義對應一個例項。該作用域僅在基於web的Spring ApplicationContext情形下有效。
global_session:在一個全域性的HTTP Session中,一個bean定義對應一個例項。
典型情況下,僅在使用portlet context的時候有效。該作用域僅在基於web的Spring ApplicationContext情形下有效。
4.5、指定Bean的初始化和銷燬
Spring可以管理Bean例項在例項化結束之後和被銷燬之前的行為。通過property的init-method屬性可以指定某個方法應該在Bean全部依賴關係設定結束後自動執行;通過property的destroy-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是一個開源框架 是一個輕量的控制反轉和麵向切面的容器框架 大小和開銷都是輕量的。 通過控制反轉技術可以達到鬆耦合的目的 切面程式設計,允許通過分離應用的業務邏輯。 包含並管理應用物件的配置和生命週期,是一個容器,並且能夠組
Spring詳解(IOC和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