關於Spring的簡介,我在這裏就不描述了。直接上乾貨:它最核心的理念是Ioc(控制翻轉)和AOP(面向切面變成),其中IOC是Spring的基礎,而AOP則是其最重要的功能,最爲典型的當屬數據庫事務的使用。
1.Spring IoC概述
控制反轉是一個比較抽象的概念,對於初學者不好理解。我們舉例說明,比如在現實生活當中,人們在需要一樣東西,我們的基本想法就是找東西。比如我們想喝橙子,在沒有飲品店的時候。我們最直觀的想法就是做一杯橙子(需要水,果汁機,糖,橙子),注意這是你自己主動創造一杯橙汁的過程。然而到今時今日飲品店盛行的時代,就沒有必要自己去手動做橙汁了。想喝橙汁直接打個電話聯繫到飲品店然後下單你想要什麼口味的橙汁就行了。過會就會有人送上門。這只是舉了一個很簡單的例子,但這個例子當中包含了控制反轉的思想,在一個團隊當中是由許多開發者組成。假設你現在在一個電商網站負責開發工作,你熟悉商品交易流程,但是對財務卻不怎麼熟悉。而團隊中有些成員對財務處理很熟悉,在商品交易流程需要調度財務的相關接口才能實現。
那麼你應該會想:
1. 熟悉財務的同事開發對應的接口;
2.自己請力親去學習財務處理然後開發對應的接口;
其實這就完全可以剛剛舉例的橙汁例子進行類比,橙汁就等同與財務接口。而熟悉財務的同事等同與飲品店。根據你描述的橙汁的要求,聯繫方式,送貨上門的地址。就等同獲取財務接口實例的描述。雖然你沒有主動去處理開發對應的財務接口,把主動權交給了同事,這就是控制反轉的概念。 爲了更好的闡述上面的抽象描述,用java代碼形式模擬主動創建和別動創建的過程。
2.主動創建對象
我需要一杯橙汁 原料:橙子 ,糖 ,水; 攪拌機是工具
package com.spring.chapter;
/**
*
* @author Administrator
* 水果攪拌機
*/
public class Blender {
public String mix(String water,String fruit,String sugar){
String juice="這是一杯由液體:"+water+"\n 水果:"+fruit+"\n 糖量:"+sugar+"\n組成的果汁";
return juice;
}
}
package com.spring.chapter;
/**
*
* @author Administrator 果汁生成器
*/
public class JuiceMaker {
private Blender blender = null;// 攪拌機
private String water;// 水
private String fruit;// 水果
private String sugar;// 糖分
// 創建攪拌機對象,傳出水果等參數
public String makeJuice() {
blender = new Blender();
return blender.mix(water, fruit, sugar);
}
}
主動創造橙汁,需要我們自己熟悉可能不太熟悉的工作——如何攪拌橙汁。所以在現實中一個複雜的系統面對着成百上千中情況。如果都需要這樣維護,那麼回十分複雜。有些東西我們並不需要知道過程,只需要獲得最後的結果。正如果汁那樣,接下來看看被動創建對象。
3.被動創建對象(Spring 第一個程序)
我們已經有了果汁製造機,那麼只需要對其進行描述就可以得到果汁了。
步驟如下:
1.在你項目工程中導入Spring初始化所需要的jar包 ——右擊Build Path ,src下創建一個spring包,在包中創建一個叫spring.XML文件。
2.在xml文件中導入spring所需要的頭信息 ,以及創建bean進行描述。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- 當 Spring 應用程序被加載到內存中時,框架利用了上面的配置文件來創建所有已經定 義的 beans,並且按照 標籤的定義爲它們分配一個唯一的
ID。你可以使用 標籤來傳遞在創建對象時使用不同變量的值。 -->
<!-- 用於給不同的 bean 分配唯一的 ID,並且控制不同值的對象的創建 --> <!-- class代表水果生成器,填入類路徑 -->
<bean id="JuiceMakerBean" class="com.spring.chapter.JuiceMaker">
<!-- 給水果賦值,進行描述 依次如下 -->
<property name="water" value="5g" />
<property name="fruit" value="橙子" />
<property name="sugar" value="3g" />
</bean>
<bean id="BlenderBean" class="com.spring.chapter.Blender">
<property name="juiceMaker" ref="JuiceMakerBean"></property>
</bean>
</beans>
3.在pojo對象文件和攪拌機中給屬性創建get,set方法(注意攪拌機中的類屬性也要set,get)
package com.spring.chapter;
/**
*
* @author Administrator 果汁生成器
*/
public class JuiceMaker {
private String water;// 水
private String fruit;// 水果
private String sugar;// 糖分
public String getWater() {
return water;
}
public void setWater(String water) {
this.water = water;
}
public String getFruit() {
return fruit;
}
public void setFruit(String fruit) {
this.fruit = fruit;
}
public String getSugar() {
return sugar;
}
public void setSugar(String sugar) {
this.sugar = sugar;
}
}
package com.spring.chapter;
/**
*
* @author Administrator 水果攪拌機
*/
public class Blender {
public JuiceMaker getJuiceMaker() {
return juiceMaker;
}
public void setJuiceMaker(JuiceMaker juiceMaker) {
this.juiceMaker = juiceMaker;
}
private JuiceMaker juiceMaker = null;
public String mix() {
String juice = "這是一杯由:" + "\n 水果:" + juiceMaker.getFruit() + "\n 糖量:" + juiceMaker.getSugar() + "\n 水量:"
+ juiceMaker.getWater() + "\n組成的果汁";
return juice;
}
}
4. 創建Main類以及進行最後的測試
package com.spring.chapter;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/**
*
* @author Administrator
* 通過classpathxmlapplicontext加載bean文件並獲取對象調用其方法
*/
public class Main {
public static void main(String[] args) {
//創建應用程序的上下文,加載 beans 的配置文件
ApplicationContext applicationContext=new ClassPathXmlApplicationContext("spring_xml/spring.xml");
//獲得指定的 bean。這個方法使用 bean 的 ID 返回一個最終可以轉換爲實際對象的通用對象
Blender blender=(Blender) applicationContext.getBean("BlenderBean");
System.out.println(blender.mix());
}
}
結果:
這個案例的源碼: https://files.cnblogs.com/files/ysource/springdome.rar
案例中的spring初始jar包:https://files.cnblogs.com/files/ysource/spring%E5%88%9D%E5%A7%8B%E5%8C%96jar.rar