IoC基礎
新建一個空白的maven項目
分析完成
我們先用我們原來的方式寫一段代碼 .
1. 先寫一個UserDao接口
publicinterfaceUserDao{publicvoidgetUser();}
2. 再去寫Dao的完成類
publicclassUserDaoImplimplementsUserDao{@OverridepublicvoidgetUser(){System.out.println("獲取用戶數據");}}
3. 然后去寫UserService的接口
publicinterfaceUserService{publicvoidgetUser();}
4. 最后寫Service的完成類
publicclassUserServiceImplimplementsUserService{privateUserDaouserDao=newUserDaoImpl();@OverridepublicvoidgetUser(){userDao.getUser();}}
5. 測試一下
@Testpublicvoidtest(){UserServiceservice=newUserServiceImpl();service.getUser();}
這是我們原來的方式 , 開始大家也都是這么去寫的對吧 . 那我們現在修改一下 .
把Userdao的完成類增加一個 .
publicclassUserDaoMySqlImplimplementsUserDao{@OverridepublicvoidgetUser(){System.out.println("MySql獲取用戶數據");}}
緊接著我們要去運用MySql的話 , 我們就需要去service完成類里面修改對應的完成 .

publicclassUserServiceImplimplementsUserService{privateUserDaouserDao=newUserDaoMySqlImpl();@OverridepublicvoidgetUser(){userDao.getUser();}}
在假設, 我們再增加一個Userdao的完成類 .
publicclassUserDaoOracleImplimplementsUserDao{@OverridepublicvoidgetUser(){System.out.println("Oracle獲取用戶數據");}}
那么我們要運用Oracle , 又需要去service完成類里面修改對應的完成 . 假設我們的這種需求十分大 , 這種 方式就根本不實用了, 以至反人類對吧 , 每次變動 , 都需要修改大量代碼 . 這種設想的耦合性太高了, 牽一 發而動全身
那我們如何去解決呢 ?
我們可以在需要用到他的地方 , 不去完成它 , 而是留出一個接口 , 利用set , 我們去代碼里修改下 .
publicclassUserServiceImplimplementsUserService{privateUserDaouserDao;//利用set完成publicvoidsetUserDao(UserDaouserDao){this.userDao=userDao;}@OverridepublicvoidgetUser(){userDao.getUser();}}
現在去我們的測試類里 , 進行測試 ;
@Testpublicvoidtest(){UserServiceImplservice=newUserServiceImpl();service.setUserDao(newUserDaoMySqlImpl());service.getUser();//那我們現在又想用Oracle去完成呢service.setUserDao(newUserDaoOracleImpl());service.getUser();}
大家發現了區別沒有 ? 可能許多人說沒啥區別 . 但是同學們 , 他們已經發生了根本性的變化 , 許多地方都 不一樣了 . 細心去思索一下 , 以前所有東西都是由程序去進行控制創建 , 而現在是由我們自行控制創建對 象 , 把主動權交給了調用者 . 程序不用去管怎么創建,怎么完成了 . 它只負責提供一個接口 . 這種思想 , 從實質上解決了問題 , 我們程序員不再去治理對象的創建了 , 更多的去關注業務的完成 . 耦合 性大大升高 . 這也就是IOC的原型 !
IOC實質
控制反轉IoC(Inversion of Control),是一種設想思想,DI(依靠注入)是完成IoC的一種辦法,也有人認 為DI只是IoC的另一種說法。沒有IoC的程序中 , 我們運用面向對象編程 , 對象的創建與對象間的依靠關系 完全硬編碼在程序中,對象的創建由程序自己控制,控制反轉后將對象的創建轉移給第三方,個人認為 所謂控制反轉就是:獲得依靠對象的方式反轉了。
IoC是Spring框架的核心內容,運用多種方式完美的完成了IoC,可以運用XML配置,也可以運用注解, 新版本的Spring也可以零配置完成IoC。
Spring容器在初始化時先讀取配置文件,根據配置文件或元數據創建與組織對象存入容器中,程序運用 時再從Ioc容器中取出需要的對象。
采用XML方式配置Bean的時分,Bean的定義信息是和完成分離的,而采用注解的方式可以把兩者合為 一體,Bean的定義信息直接以注解的形式定義在完成類中,從而達到了零配置的目的。
控制反轉是一種通過描述(XML或注解)并通過第三方去消費或獲取特定對象的方式。在Spring中完成 控制反轉的是IoC容器,其完成辦法是依靠注入(Dependency Injection,DI)。
評論前必須登錄!
立即登錄 注冊