首頁 > 軟體

Spring零基礎到進階之鴻蒙開篇

2022-07-11 14:03:42

Spring是什麼

用一句簡單的話來概括Spring:Spring是包含了眾多工具方法的IoC容器。那麼問題來了,什麼是容器,什麼是IOC容器?下面就一起來看看吧

1.什麼是容器?

容器就是用來榮南某種物品的裝置,前面我們也是學了很多容器的,類似於List/Map就是一個儲存資料的容器,Tomcat就是一個儲存Web專案的容器。

2.什麼是IOC?

IOC(inversion of Control)翻譯成中文就是“控制反轉”的意思,這具體是什麼意思呢?通過一個例子來解釋一下:

public class NewCarExample {
    public static void main(String[] args) {
        Car car = new Car();
        car.init();
    }
    /**
     * 汽⻋物件
     */
    static class Car {
        public void init() {
            // 依賴⻋身
            Framework framework = new Framework();
            framework.init();
        }
    }
    /**
     * ⻋身類
     */
    static class Framework {
        public void init() {
            // 依賴底盤
            Bottom bottom = new Bottom();
            bottom.init();
        }
    }
    /**
     * 底盤類
     */
    static class Bottom {
        public void init() {
            // 依賴輪胎
            Tire tire = new Tire();
            tire.init();
        }
    }
    /**
     * 輪胎類
     */
    static class Tire {
        // 尺⼨
        private int size = 30;
        public void init() {
            System.out.println("輪胎尺⼨:" + size);
        }
    }
}

此時就構建出來一輛“汽車”,此時認為只要列印出來了輪胎的尺寸就表示構建成功了:

但是如果需求如果發生了變化,不再自己給定汽車的輪胎尺寸,而是根據使用者的需求來進行變化,此時就會發現要改的程式碼不僅僅只是一個引數

public class NewCarUpdateExample {
    public static void main(String[] args) {
        //使用者自己給定尺寸
        Car car = new Car(50);
        car.run();
    }
    /**
     * 汽⻋物件
     */
    static class Car {
        private Framework framework;
        public Car(int size) {
            framework = new Framework(size);
        }
        public void run() {
            // 依賴⻋身
            framework.init();
        }
    }
    /**
     * ⻋身類
     */
    static class Framework {
        private Bottom bottom;
        public Framework(int size) {
            bottom = new Bottom(size);
        }
        public void init() {
            // 依賴底盤
            bottom.init();
        }
    }
    /**
     * 底盤類
     */
    static class Bottom {
        private Tire tire;
        public Bottom(int size) {
            tire = new Tire(size);
        }
        public void init() {
            // 依賴輪胎
            tire.init();
        }
    }
    /**
     * 輪胎類
     */
    static class Tire {
        // 尺⼨
        private int size;
        public Tire(int size) {
            this.size = size;
        }
        public void init() {
            System.out.println("輪胎尺⼨:" + size);
        }
    }
}

這才僅僅是改變了一個輪胎尺寸,如果需求再需要加顏色、花紋、logo呢?那就會更加麻煩,這些都是當底層發生改變的時候,要修改的是整個調⽤鏈上的所有程式碼,那麼為什麼會出現這樣的問題呢?

分析可知,這些類都是互相依賴的,耦合性非常強,那麼該如何解耦呢?IoC就可以解決這樣的問題,將控制權反轉出去,不再自己掌控,而是將控制權交給IoC管理,只有自己使用的使用才呼叫

public class IocCarExample {
    public static void main(String[] args) {
        Tire tire = new Tire(20);
        Bottom bottom = new Bottom(tire);
        Framework framework = new Framework(bottom);
        Car car = new Car(framework);
        car.run();
    }
    static class Car {
        private Framework framework;
        public Car(Framework framework) {
            this.framework = framework;
        }
        public void run() {
            framework.init();
        }
    }
    static class Framework {
        private Bottom bottom;
        public Framework(Bottom bottom) {
            this.bottom = bottom;
        }
        public void init() {
            bottom.init();
        }
    }
    static class Bottom {
        private Tire tire;
        public Bottom(Tire tire) {
            this.tire = tire;
        }
        public void init() {
            tire.init();
        }
    }
    static class Tire {
        private int size;
        public Tire(int size) {
            this.size = size;
        }
        public void init() {
            System.out.println("輪胎:" + size);
        }
    }
}

此時就不在類裡面進行控制了,而是隻有在需要使用的時候,才去傳入而是不是自己控制

再需要改動的時候的話,就只需要改最底層的,而不是改變整個控制鏈!

因此使用IOC最大的優點就是實現了程式碼的解耦;物件(Bean)生命週期交給IOC框架來維護,就不需要再關注物件的建立了!

3.理解Spring IoC

通過上面的對IoC的認識,就可以得知Spring IoC容器最核心的功能了:

  • 將Bean(物件)儲存到Spring(容器)中;
  • 將Bean(物件)從Spring(容器)中取出來;

4.瞭解DI

說到IoC就不得不提起DI(Dependency Injection)了,翻譯過來就是依賴注入的意思,那具體代表什麼呢?所謂依賴注⼊,其實就是在 IoC 容器運⾏期間,動態地將某種依賴關係注⼊到物件之中,其實DI和IoC是從不同的⻆度的描述的同⼀件事情,而IoC其實是一種思想,而DI是具體的落地實現,思想就指導了具體的落地實現!

IoC和DI的區別:IoC是一種思想,DI是一種實現(類似於樂觀鎖和CAS);

第一次介紹到這就結束了,主要還是先來認識一下Spring到底是什麼,後面我會再介紹其具體使用和方法的!

到此這篇關於Spring零基礎到進階之鴻蒙開篇的文章就介紹到這了,更多相關Spring 基礎內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com