Spring——控制反轉(IOC)和麵向切面(AOP)
可以將所有的物件建立和依賴關係維護交給Spring管理的AOP程式設計支援
Spring 提供的切面程式設計可以方便的實現對程式進行許可權攔截,執行監控等宣告式事物的支援。
Spring支援Junit4,方便測試。
IOC的底層實現原理
IOC將物件的建立權反轉給Spring,實現程式的解耦合。
spring是輕量級開源框架
spring核心有兩部分:
(1)控制反轉 ioc:
* 比如現在有普通類,在這個類裡面有普通的方法,呼叫這個類裡面的普通的方法,需要建立類物件,使用物件呼叫方法。
* 建立類的物件,使用原始方式new物件。使用ioc實現物件建立,不需要手動new
** 把物件建立交給spring配置
(2)面向切面 aop:
* 不通過修改原始碼方式增強類裡面的方法
* aop底層動態代理
spring是一站式框架
(1)spring針對javaee三層,在每一層提供解決技術
* web層:springMVC
* service層: spring ioc
* dao層:spring jdbcTemplate
ioc稱為控制反轉,把物件建立不是new出來,而是在spring使用配置方式建立
IOC入門案例
1 建立普通類,在這個類裡面建立普通的方法,呼叫類裡面的方法 第一步 (1)使用spring框架,核心有四個部分(四個jar包) * beans:spring配置檔案相關配置 * core:核心部分 * context:spring註解 * SpEL : spring表示式 第二步建立類,建立普通的方法 第三步建立spring配置檔案,配置user物件建立 在spring配置檔案配置物件 <!-- 配置user物件 id: 根據id值獲取物件 class: 要建立物件所在類全路徑 --> <beanid="user"class="cn.itcast.ioctest.User"></bean> 第四步測試如何獲取配置出來的user物件 @Test publicvoid testUser() { //1 載入spring配置檔案 /* * 載入spring配置檔案,把配置物件建立 * */ ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml"); //2 根據id值獲取物件 // User user1 = context.getBean("user",User.class); User user = (User) context.getBean("user"); System.out.println(user); user.add(); } |
Spring的bean管理(xml方式)
什麼是bean管理
兩個操作:
(1)建立物件(bean例項化)
(2)設定類裡面屬性值(注入屬性)
spring的bean管理有兩種方式
(1)基於xml配置檔案方式
(2)基於註解方式
1 在spring裡面通過配置檔案建立物件 (1)建立物件操作 2 bean例項化(建立物件)三種方式實現 第一種使用類的無引數構造建立(重點) 第二種使用靜態工廠建立(瞭解) (1)建立靜態的方法,返回類物件 第三種使用例項工廠建立(瞭解) (1)建立不是靜態的方法,返回類物件 |
bean標籤常用屬性
1 id屬性 (1)根據id屬性值獲取物件 (2)在一個spring配置檔案中,可以有多個bean標籤,但是bean標籤id屬性值不同 2 class屬性 (1)類的全路徑 3 name屬性 (1)name屬性作用和id屬性一樣的 (2)id屬性值裡面不能包含特殊符號的 (3)name屬性值可以包含特殊符號 /user 4 scope屬性 (1)主要作用:配置建立物件是單例項還是多例項物件 (2)屬性值: * 預設值,singleton,表示單例項物件 * prototype,表示多例項物件 ** action是多例項物件 request:把建立物件放到request裡面 session:把建立物件放到session裡面 globalSession:把建立物件放到globalSession裡面 ** 單點登入 |
spring配置檔案在伺服器啟動時候載入最合適,建立物件
底層原理:
* ServletContext物件:當伺服器啟動時候,每個專案有一個ServletContext物件,是整個web專案範圍的域物件
* 監聽器:監聽ServletContext物件建立和銷燬
(2)在開發中,一般讓配置檔案在伺服器啟動時候載入,把配置檔案中物件建立
Bean生命週期配置(瞭解)
1 建立servlet時候,執行init方法 2 銷燬servlet時候,執行destory方法 |
屬性注入介紹
1 在類裡面有屬性,向類裡面屬性中設定值,這個過程稱為屬性注入 2 向類裡面屬性中設定值,在java程式碼中有三種方式實現 3 spring框架裡面支援是set方法注入和有引數構造注入 (1)常用set方法注入 |
使用有引數構造注入
1 建立類,定義屬性,生成有引數構造 /** * 有引數構造注入 * @author asus * */ publicclass Book { private String bname; private String author; //生成有引數構造 public Book(String bname, String author) { this.bname = bname; this.author = author; } publicvoid add() { System.out.println("book:"+bname+"::"+author); } } 2 配置屬性注入 <!-- 使用有引數構造注入 --> <beanid="book"class="cn.itcast.attr.Book"> <!-- 體現有引數構造 name: 屬性名稱 value:設定值 --> <constructor-argname="bname"value="易筋經"></constructor-arg> <constructor-argname="author"value="小王"></constructor-arg> </bean> |
使用set方法注入(重點)
1 建立類,定義屬性,生成屬性set方法 /** * set方法注入 * @author asus * */ publicclass Orders { private String oname; private String oaddress; //生成set方法 publicvoid setOname(String oname) { this.oname = oname; } publicvoid setOaddress(String oaddress) { this.oaddress = oaddress; } publicvoid add() { System.out.println("orders:"+oname+"::"+oaddress); } } 2 配置屬性注入 <!-- set方法注入 --> <beanid="orders"class="cn.itcast.attr.Orders"> <!-- name: 屬性名稱 value:設定值 --> <propertyname="oname"value="洗髓經"></property> <propertyname="oaddress"value="嵩山"></property> </bean> |
注入物件型別屬性(重點)
第一步在service定義dao型別屬性 publicclass UserService { //目的:在service獲取dao物件 //把dao物件注入到service //1 定義UserDao型別屬性 private UserDao userDao; //2 生成set方法 publicvoid setUserDao(UserDao userDao) { this.userDao = userDao; } 第二步實現配置 |
p名稱空間注入(瞭解)
1 引入p名稱空間 2 配置檔案中,使用名稱空間注入屬性 (1)spring2.x以下版本,不能使用p名稱空間注入 |
spring分模組配置開發
1 在程式碼裡面載入配置時候時候,引入多個配置檔案 2 在配置檔案引入其他spring配置檔案 |
注入複雜型別屬性(會用)
1 陣列 2 List集合 3 Map集合 4 Properties /** * 複雜型別屬性 * @author asus * */ publicclass Customer { //定義屬性 private String[] arrs; private List<String> list; private Map<String,String> map; private Properties properties; //set方法 publicvoid setArrs(String[] arrs) { this.arrs = arrs; } publicvoid setList(List<String> list) { this.list = list; } publicvoid setMap(Map<String, String> map) { this.map = map; } publicvoid setProperties(Properties properties) { this.properties = properties; } publicvoid find() { System.out.println("arrs: "+Arrays.toString(arrs)); System.out.println("list: "+list); System.out.println("map: "+map); System.out.println("properties: "+properties); } } <beanid="customer"class="cn.itcast.attr.Customer"> <!-- 陣列 --> <propertyname="arrs"> <list> <value>lucy</value> <value>mary</value> <value>jack</value> </list> </property> <!-- list --> <propertyname="list"> <list> <value>小王</value> <value>小金</value> <value>小奧</value> </list> </property> <!-- map--> <propertyname="map"> <map> <
什麼是spring,它能夠做什麼? Spring是一個開源框架,它由Rod Johnson建立。它是為了解決企業應用開發的複雜性而建立的。 Spring使用基本的JavaBean來完成以前只可能由EJB完成的事情。 然而,Spring的用途不僅限於伺服器端的開發。從簡單性、可測試性
可以將所有的物件建立和依賴關係維護交給Spring管理的AOP程式設計支援
Spring 提供的切面程式設計可以方便的實現對程式進行許可權攔截,執行監控等宣告式事物的支援。
Spring支援Junit4,方便測試。
IOC的底層實現原理
IOC將物件的建立權反轉給Sp
依賴注入(DI)和控制反轉(IoC)
在日常編碼中經常遇到在一個類中呼叫另一個類的多個方法,所以就在一個類中new出需要用到的類,也就是組合模式。比如說A類裡面需要用到很多B類裡面的方法,所以要在A類裡面new一個B。
public class
spring溫習筆記
Spring是一個開放原始碼的設計層面框架,他解決的是業務邏輯層和其他各層的鬆耦合問題,因此它將面向介面的程式設計思想貫穿整個系統應用。
Spring 的控制反轉IOC、面向切面程式設計AOP等特性不多說。
本文核心內容:搭建一個Spring Dem
學習過Spring框架的人一定都會聽過Spring的IoC(控制反轉) 、DI(依賴注入)這兩個概念,對於初學Spring的人來說,總覺得IoC 、DI這兩個概念是模糊不清的,是很難理解的,今天和大家分享網上的一些技術大牛們對Spring框架的IOC的理解以及談談我對Spri
轉自:http://baike.baidu.com/link?url=BhIdxXwp9Xs7PjzebLL8sisJrgh0MiLUB2clkgpf-rpyexxlKTOXDDCxmX1MYe4qenJ9sfcLUw9gQWZJj9oMw_
控制反轉——Spring通
一.簡介:
Spring在英語中含義是春天,對於JavaEE開發者來說,Spring框架出現確實帶來了一股全新的春天的氣息。早在2002年,Rod
Johson在其編著的《Expert one to one J2EE design anddevelopment》書中,對J
1.什麼是控制? 如下圖所示,我們看到了 軟體系統中 物件的
高耦合現象。全體齒輪的轉動由一個物件來控制,如類B。
2.什麼是 控制反轉? 是用來對物件進行解耦。藉助第三方實現具有依賴關係的 param mls 構造 上下文環境 麻煩 framework 中文 回調接口 可能
一。spring核心概念理解
控制反轉:
控制反轉即IoC (Inversion of Control)。它把傳統上由程序代碼直接操控的對象的調用權交給容器。通過容器來實現
首先想說說IoC(Inversion of Control,控制反轉)。這是spring的核心,貫穿始終。所謂IoC,對於spring框架來說,就是由spring來負責控制物件的生命週期和物件間的關係:
誰控制誰,控制什麼:傳統Java SE程式設計,我們直接在物件內部通過new進行
這學期的課程安排,我們可以系統的學習spring框架了。 相比較自己看部落格筆記,系統的在課堂上學習還是很有必要。
spring是一個開源框架,是為了解決企業應用程式開發複雜性而建立的。 框架的主要優勢之一就是利用其分層架構。 分層架構允許選擇使用哪一個元件,同時
首先在開篇之前我們一定一定要明確的就是:DI和IOC並不是兩個概念,DI是IOC思想在應用上的具體例子。
什麼是控制反轉(IOC)?
“控制”就是指一件事物對另一件事物進行一種管理,而另一件事物處在一件事物的管理之下,這就叫控制。
在面向物件程式設計的時候,每一個程式的
首先提問, 什麼是 Spring IOC 容器?
Spring 框架的核心是 Spring 容器。容器建立物件,將它們裝配在一起,配置它們並管理它們的完整生命週期。Spring 容器使用依賴注入來管理組成應用程式的元件。容器通過讀取提供的配置元資料來接收物件
控制反轉(IOC)實際上由Spring容器實現程式碼對程式設計師的解耦,不再由程式設計師來例項化物件而是由Spring容器來管理呼叫物件。
依賴注入的思想是這樣,當一個類對另一個類有依賴時,不再該類內部對依賴的類進行例項化,而是由容器自動注入一個所依賴的類的例項。
面向切面程式設計:就是將公 轉自:https://www.cnblogs.com/ysyn/p/5563256.html
引言:
專案中遇到關於IOC的一些內容,因為和正常的邏輯程式碼比較起來,IOC有點反常。因此本文記錄IOC的一些基礎知識,並附有相應的簡單例項,而在實際專案中再複雜的應用也只是在 Spring框架的主要作用,就是提供了一個容器,使用該容器就可以建立並管理物件。比如說Dao類等,又或者是具有多依賴關係的類(Student類中包含有Teacher類的成員變數)
Spring有兩個核心概念,一個是控制反轉(IOC,全稱為Inverse of Control),另一個則是面向切面程式設計(AO Spring-IOC
1、簡述
1.1 依賴注入DI
現實開發中,每一個應用都會由兩個或多個類組成,這些類之間相互協作完成特定的業務邏輯。根據傳統做法,每個物件負責管理與自己協作的物件的引用(也就是,每個物件中使用new例項化物件的方式建立協作的物件)——這將導致==高度耦合和難以測試的程式碼==。
publ 說明 實例化 一個 XML 處理 當前 現在 兩個 角色 現有角色如下:
一個接口Interface,兩個接口實現類InstatnceA、InstanceB,一個調用類User。
已有代碼如下:
User類中實例化了一個InstatnceA對象,代碼如:Interface 常見 業務 cin org body pac register resolve 避免 要想理解 PHP 依賴註入 和 控制反轉 兩個概念,就必須搞清楚如下的兩個問題:
DI —— Dependency Injection 依賴註入
IoC —— Inversion of 增加 clas 說明 class a lan xxx ron pen pub 隨著net的深入學習,出現了很多概念性的東西需要理解,現在統一記錄一下。
1.依賴:現階段在任何一個有請求作用的系統,都會出現A類調用B類的情況,這時候A類就依賴於B類,A類和B類存在依賴關系。 |