目錄
第二節:spring ioc 實例講解第三節:裝配一個 bean
(2)實現簡便版本的IOC(控制反轉)思想:多態,接口,繼承
第一節:spring ioc 簡介
IOC(控制反轉:Inverse of Control ),又稱作 依賴注入,是一種重要的面向對象編程的法則來削減計算機程序的耦合問題,也是輕量級的 Spring 框架的核心。 |
第二節:spring ioc 實例講解第三節:裝配一個 bean
第四節:依賴注入
1,屬性注入; 2,構造函數注入;(通過類型;通過索引;聯合使用) 3,工廠方法注入;(非靜態工廠,靜態工廠) 4,泛型依賴注入;(Spring4 整合 Hibernate4 的時候順帶講) |
第五節:注入參數
1,基本類型值; 2,注入 bean; 3,內部 bean; 4,null 值; 5,級聯屬性; 6,集合類型屬性; |
第六節:Spring 自動裝配
通過配置 default-autowire 屬性,Spring IOC 容器可以自動爲程序注入 bean;默認是 no,不啓用自動裝配; default-autowire 的類型有 byName,byType,constructor; byName:通過名稱進行自動匹配; byType:根據類型進行自動匹配; constructor:和 byType 類似,只不過它是根據構造方法注入而言的,根據類型,自動注入; 建議:自動裝配機制慎用,它屏蔽了裝配細節,容易產生潛在的錯誤; |
開始學習:
(1)IOC(控制反轉)出現的原因(舉例子進行說明)
代碼copy請看我【舉例子版源代碼】
新建JavaWork,obZhangSan,Test .java三個文件。
內部內容:
然後執行Test.java
重點!!!
分析上面的程序(javawork,zhangsan .java)
我們會發現,測試這個工作,完全和那個人耦合在了一起。
假如,測試員換人了,換成了李四,我們發現,代碼統統都要換!!!
這就導致了,文件變化太大,破壞了完整性。
這個時候就有了IOC的設計思路。
控制反轉——把這個控制權轉交出來,某個人執行的測試工作轉交給主管。
(2)實現簡便版本的IOC(控制反轉)思想:多態,接口,繼承
代碼copy請看我【簡便版本IOC 源代碼實現】
首先你得通過一個接口(Interface)!!!
1.先定義一個接口方法,然後讓測試人員繼承它
2.新增了一個李四測試人員:
3.更改張三代碼,使其繼承測試接口
4.定義set方法(使之定義使用哪一個測試員),然後那個被定義好的測試員再在主管那裏去被調用,再去調用自身的test方法,其test的方法是我們從接口繼承而來,又重新實現的。
5.主管。
(3)使用Spring管理IOC容器。
8min,明天更新。
【舉例子版源代碼】
obZhangSan.java
package service;
public class obZhangSan {
//張三測試員,具備做測試的動作。
public void test(){
System.out.println("張三-測試程序");
}
}
Test.java
package test;
import service.JavaWork;
public class Test {
//主管執行命令
public static void main(String[] args) {
JavaWork javawork=new JavaWork();
javawork.doTest();
}
}
JavaWork.java
package service;
public class JavaWork {
//java測試工作
public void doTest(){
obZhangSan zhangsan=new obZhangSan();
zhangsan.test();//張三來做測試操作。
}
}
【簡便版本IOC 源代碼實現】
Tester.java
package service;
public interface Tester {//這就是一個接口方法,然後我們讓測試人員繼承它!
public void test();//運用到的多態的思想
}
LiSi.java
package service;
public class LiSi implements Tester{
public void test(){
System.out.println("李四-測試程序");
}
}
obZhangSan.java
package test;
import service.JavaWork;
import service.LiSi;
import service.obZhangSan;
public class Test {
//主管執行命令
public static void main(String[] args) {
JavaWork javawork=new JavaWork();
//javawork.setTester(new obZhangSan());
//假如這裏需要換一個人了,代碼就完全不需要動。
javawork.setTester(new LiSi());
javawork.doTest();
}
//這樣子控制權就不是業務代碼來管理的,控制權就移交給了住慣了。
}
JavaWork.java
package service;
public class JavaWork {
//定義一個測試員,具體誰來執行,從主管那邊設置。
private Tester tester;//然後還需要一個set方法,快捷。
public void setTester(Tester tester) {
this.tester = tester;
}
//java測試工作
public void doTest(){
/* obZhangSan zhangsan=new obZhangSan();
zhangsan.test();//張三來做測試操作。*/
tester.test();//只需要某個人來做測試,而不用具體管做測試的是誰。
}
}
Test.java
package test;
import service.JavaWork;
import service.LiSi;
import service.obZhangSan;
public class Test {
//主管執行命令
public static void main(String[] args) {
JavaWork javawork=new JavaWork();
//javawork.setTester(new obZhangSan());
//假如這裏需要換一個人了,代碼就完全不需要動。
javawork.setTester(new LiSi());
javawork.doTest();
}
//這樣子控制權就不是業務代碼來管理的,控制權就移交給了住慣了。
}