1. 程式人生 > >小編Spring是什麼、spring容器、IOC和DI

小編Spring是什麼、spring容器、IOC和DI

1.Spring
(1)Spring是什麼?
是一個輕量級的、用來簡化企業級應用開發的開發框架。

注:
a.簡化開發:
Spring對常用的api做了簡化,比如,使用Spring
jdbc來訪問資料庫,就不用再考慮如何獲取連線、關閉連線、處理異常等等。
b.解耦:
Spring容器(Spring框架的一個模組)幫我們管理
物件(包括物件的建立及物件之間的依賴關係),
這樣一來,物件之間的耦合度會大大降低,提供高了
系統的維護性。
c.整合其它框架:
Spring可以將其它一些常用的框架整合進來,比如
可以將Quartz,MyBatis等整合進來。
(2)Spring容器
1)Spring容器是什麼?
Spring框架的一個核心模組,用於管理物件。

注:
管理物件指的是,spring容器會用我們建立物件,
並且建立物件之間的依賴關係。
2)如何啟動Spring容器?
step1.導包。

<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>3.2.8.RELEASE</version>
</dependency>
step2.新增配置檔案(applicationContext.xml)。

將配置檔案新增到main/resources下。
step3.啟動Spring容器。

ApplicationContext ac =
new ClassPathXmlApplicationContext(
"applicationContext.xml");
3)建立物件
a.方式一  使用無參構造器

step1. 給類新增無參構造器(預設構造器)。
step2. 在配置檔案當中,使用bean元素來進行配置。

step3. 啟動容器,呼叫容器提供的getBean方法。 //通過容器獲得物件 Apple ap1 = ac.getBean("ap1",Apple.class); b.方式二  使用靜態工廠方法 (瞭解) c.方式三  使用例項工廠方法 (瞭解) 4)作用域 a.預設情況下,對於某個bean,容器只會建立一個例項。 b.如果要讓容器建立多個例項,需要設定bean的作用域。
5)生命週期 spring容器在建立好物件之後,會呼叫初始化方法, 在銷燬該物件之前,會呼叫銷燬方法。 6)延遲載入 a.預設情況下,容器啟動之後,會將所有作用域為singleton的bean例項化。 b.延遲載入指的是,通過設定lazy-init="true"告訴容器, 啟動之後不再建立其例項。 (3)IOC和DI 1)IOC是什麼? (Inversion Of Controll 控制反轉) 物件之間的依賴關係應該由容器來建立。 2)DI是什麼? (Dependency Injection 依賴注入) 容器通過呼叫set方法或者構造器來建立物件之間的依賴關係。 注: IOC是目標,DI是手段。 3)set方法注入 step1. 為類新增set方法。 step2. 在配置檔案當中,使用property元素來配置set 方法注入。 step3. 啟動容器,呼叫getBean方法。 3)set方法注入 ![](http://i2.51cto.com/images/blog/201812/05/800e7fdae63e852396da98d0d7752eed.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=) 4)構造器注入 step1. 新增相應的帶參的構造器。 step2. 使用 元素來配置構造器注入。 step3. 啟動容器,呼叫getBean方法。 4)自動裝配 (瞭解) a.什麼是自動裝配? 容器依據某些規則,自動查詢符合要求的物件, 然後建立物件之間的依賴關係。 注: 容器仍然要呼叫set方法或者構造器。 b.如何自動裝配? 使用autowire屬性指定裝配的規則:   5)注入基本型別的值 6)注入集合型別的值 a.支援四種集合型別的值的注入,分別是List,Set,Properties,Map。 b.注入方式如下: 打獵 看書 程式設計 程式設計 洛陽 金陵 開封 tom 1234 7)引用的方式注入集合型別的值 打獵 看書 程式設計 北京 南京 東京 John 1234 8)讀取properties檔案的內容 9)spring表示式 a.spring表示式的作用? 可以用來讀取其它bean的屬性 b.用法如下圖: ![](http://i2.51cto.com/images/blog/201812/05/23d87db1dd4a6b4ce775fa429262c531.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)