1. 程式人生 > >【Java框架型項目從入門到裝逼】第一節 - Spring框架 IOC的喪心病狂解說

【Java框架型項目從入門到裝逼】第一節 - Spring框架 IOC的喪心病狂解說

ng- turn ins int 代碼 入門到 extends comm min

大家好,好久不見,今天我們來一起學習一下關於Spring框架的IOC技術。

技術分享圖片

控制反轉——Spring通過一種稱作控制反轉(IoC)的技術促進了松耦合。當應用了IoC,一個對象依賴的其它對象會通過被動的方式傳遞進來,而不是這個對象自己創建或者查找依賴對象。你可以認為IoC與JNDI相反——不是對象從容器中查找依賴,而是容器在對象初始化時不等對象請求就主動將依賴傳遞給它。

技術分享圖片

好吧,那我們從簡單的說起。直接講概念有點抽象,讓我們從一個實際的場景來分析這個事情。大毛想要找個女朋友,他的朋友二毛幫忙介紹了一個女生,叫翠花。然後大毛跟翠花認識了。相處了一段時間,因為翠花要大毛和他一起打王者榮耀,可是大毛只會打鬥地主,所以分手了,為此大毛難過了好長一段時間。後來,大毛又去找二毛幫忙,希望重新找一個女朋友。大家看這個過程,其實很麻煩的,大毛如果通過熟人介紹的方式來找女朋友,必然是一個一個的接觸,比如第一次他跟翠花相親,第二次跟桂花相親,第三次又跟西蘭花相親,每次都耗費大量的精力。

技術分享圖片

相親吃飯得花錢吧,看電影得花錢吧,萬一談不來,分手還麻煩。這就是大毛跟他每一個女朋友的依賴性太強了。

現在,請大家進行一個想象,想象我們自己是天神,以我們自己的意誌來給大毛安排一個女朋友。既然我們是天神,就可以給大毛編寫一個人生的劇本。
技術分享圖片

之前大毛是通過二毛介紹,才認識了翠花,桂花,和西蘭花。現在,我們通過代碼的形式來重現一個這個過程。
技術分享圖片
劇本:

大毛:

package com.spring.bean;

public class DaMao {
    
    private GirlFriend girlFriend;

    public GirlFriend getGirlFriend() {
        return girlFriend;
    }

    public void setGirlFriend(GirlFriend girlFriend) {
        this.girlFriend = girlFriend;
    }
    
}

女朋友作為一個超類:

package com.spring.bean;

/**
 * 女朋友
 * @author Administrator
 */
public class GirlFriend {
    private String hobby;

    public String getHobby() {
        return hobby;
    }

    public void setHobby(String hobby) {
        this.hobby = hobby;
    }
    
}

翠花繼承自GirlFriend :

package com.spring.bean;

public class CuiHua extends GirlFriend{
    
}

測試類:

package com.spring.test;

import com.spring.bean.CuiHua;
import com.spring.bean.DaMao;
import com.spring.bean.GirlFriend;

public class TestDaoMao {
    
    public static void main(String[] args) {
        DaMao daMao = new DaMao();
        
        GirlFriend cuihua = new CuiHua();
        cuihua.setHobby("王者榮耀");
        
        daMao.setGirlFriend(cuihua);
        
        //看一下大毛的女朋友喜歡做什麽?
        System.out.println(daMao.getGirlFriend().getHobby());
        
    }
}

看完了這個例子,我們發現,雖然我們是天神,可是安排這樣的劇本就要去不斷地去new新的GirlFriend,這樣是不是很麻煩?

實際我們天神的職責是掌管這個大毛的命運,在合適的時間,讓大毛去談一場戀愛就可以了,至於讓誰充當大毛的女朋友,作為天神,我們不關心,對不對?

或者說,反正是我們決定,無所謂是誰。

所以,我們只需要安心編寫大毛談戀愛的劇本就行了,我們只需要知道大毛有一個女朋友就OK了,到底是誰,以後再說。因為,我們是在大毛出生之前就給他安排了劇本。那是不是我們永遠都不給大毛指定一個女朋友呢?當然也不是,我們天神一般喜歡把那些可能會改變的東西寫在 “神聖的草稿紙” 上,這個草稿紙就是XML文件。

接下來,讓我們引入Spring的集成環境,來模擬這個事情!

技術分享圖片

首先,引入Spring需要的jar包。
技術分享圖片

第二步,寫配置文件。
技術分享圖片

<?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">

    
    <bean id="DaMao" class="com.spring.bean.DaMao">
        <property name="girlFriend" ref="CuiHua"></property>
    
    </bean>
    
    <bean id="CuiHua" class="com.spring.bean.CuiHua">
        <property name="hobby" value="王者榮耀"></property>
    </bean>
  
</beans>

然後,劇本就變成了這樣:

package com.spring.test;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.spring.bean.DaMao;

public class TestDaoMao2 {
    
    public static void main(String[] args) {
        
        ApplicationContext context = new ClassPathXmlApplicationContext("GirlFriends.xml");
        DaMao daMao = (DaMao)context.getBean("DaMao");
        
        //看一下大毛的女朋友喜歡做什麽?
        System.out.println(daMao.getGirlFriend().getHobby());
        
    }
}

運行效果:
技術分享圖片

這樣的好處顯而易見,我們不需要在劇本(Java代碼)裏面指定誰是大毛的女朋友了,這些事情我們都寫在“神聖的草稿紙”上。牛逼了我的哥。IOC的原理就是在不改變劇本的情況下,由作為“天神”的你來指定誰來出演,體現在一個XML文件上。而且這些配置都是可以更改的。劇本就是Java代碼,能不改就不改。

技術分享圖片

作業:
新建一個Java項目SpringTest01 ,創建包 com.spring.bean。
需要創建的Java類:
Hero .java
屬性:
Private String heroName;
Priate String type;
Private String description;
生成對應的get、set方法,再跟據你的喜好重寫toString方法。

新建一個源文件夾etc,專門用於存放配置文件。編寫英雄池的xml文件——heroPool.xml。
在配置中加入一個英雄的具體信息:魯班七號、 射手、 嘻嘻,成功檢測到對面的智商,看來我無法發揮全部實力了。

創建包com.spring.test,新建測試類TestHero,讀取heroPool.xml,然後打印出魯班七號的具體信息。

【Java框架型項目從入門到裝逼】第一節 - Spring框架 IOC的喪心病狂解說