javascript
关于Spring的IOC和DI
原始調用模型
Spring的演化過程
Spring的調用過程
=======================================
IoC【理解】【應用】【重點】
1.IoC(Inversion of Control)控制反轉
????????????? A:控制:控制的雙方是什么?誰控制誰?
主控方:Spring
被控方:應用程序所使用的資源
???????????????????? (原始)應用程序控制自己執行操作需要使用的外部資源
???????????????????? (Spring)Spring控制整個程序中所需要使用的外部資源
????????????? B.反轉:什么是反轉?反轉什么?
正向:應用程序直接調用資源
反向:應用程序依賴Spring為其提供資源
???????????????????? 反轉的是資源的控制權
???????????????????? 應用程序由主動調用資源,變為被動的等待Spring提供資源
????????????? C.有什么好處?
正向缺點:應用程序控制的資源分布在程序的每一個地方
反向的優點:所有的資源都在Spring中,便于管理
總結:Spring反向控制應用程序所需要使用的外部資源。資源受Spring管理,利用率最大化。
?????? 2.Spring模型演化過程
?????? A.基于分層設計
????????????? UserAction?????????????????? 使用UserService,new UserService()
????????????? UserService????????????????? 使用UserDAO,new UserDAO()
????????????? UserDAO
?????? B.工廠模式,使用面向接口編程設計,解決層與層之間的緊耦合
????????????? 制作接口,制作實現類,制作對象工廠
?????? C.工廠模式+配置
????????????? 制作XML文件,將實現類配置到XML文件中
????????????? 讀取XML文件中的配置信息,得到實現類的類名
????????????? 使用反射思想,獲取實現類對象 class.newInstance();
?????? D.Spring設計雛形 自動的工廠+配置
????????????? 工廠由Spring提供,實現類使用XML格式配置
?????? 3.IoC基礎實例
??? A.導入jar包(6個)
??? B.制作log4j對應的配置文件
??? C.在src目錄下創建核心配置文件applicationContext.xml
?????????? 說明:格式可以從xsd-config.html獲取
?????????? <?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
???????????????????????? ">
?????????? </beans>
??? D.將應用程序需要使用的資源配置成Spring的Bean
?????????? <!-- Spring管理的資源全部聲明到配置文件中 -->
??? <!-- 所有資源以Bean的形式存在 -->
??? <!-- bean:聲明一個資源Bean -->
??? <!-- bean:id:用于區分bean的標識 -->
??? <!-- bean:class:bean對應的模型類名 -->
??? <bean id="userDao" class="cn.itcast.spring.ioc.UserDao">?????? </bean>
??? E.創建ApplicationContext對象
?????????? ApplicationContext ctx = new ClassPathXmlApplicationContext("配置文件名");
?????????? ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
??? F.獲取Bean對象
?????????? 使用應用上下文對象獲取
?????????? ctx.getBean("bean的id屬性值");
?????????? ctx.getBean("userService");
?????? ?????? 補充:使用文件系統獲取配置信息,要求配置文件在工程路徑下(少用)
????????????? ApplicationContext ctx = new FileSystemXmlApplicationContext("applicationContext.xml");
=================================
DI【理解】【應用】【重點】
?????? 1.DI(Dependency Injection)依賴注入指應用程序依賴Spring為其提供運行時所需的資源
?????? 2.DI實例
????????????? A.在應用程序中聲明要使用的資源
????????????? ?????? private String msg;
????????????? B.為其提供setter訪問器
????????????? ?????? public void setMsg(String msg) {
???????????????????? ?????? this.msg = msg;
????????????? ?????? }
????????????? C. 在Bean配置中配置該資源對象具有某個屬性,屬性可以配置多個
?????? ?????? ?????? <bean id="userService" class="cn.itcast.ioc.helloworld.UserService">
?????? ?????? ????????????? <!-- 在配置中,為該Bean需要注入的資源進行初始化 -->
??????????????????????????? <!-- property:為該Bean注入屬性 -->
??????????????????????????? <!-- property:name:注入的屬性名稱(變量名) -->
?????? ?????? ?????? ?????? <property name="msg" value="itcast"/>
?????? ?????? ?????? </bean>
????????????? 注意:當配置中出現的屬性在Bean類中不存在時,拋出異常
3.IoC與DI區別
?????? ?????? 同一件事,站在不同角度上看待問題的不同描述
?????? ?????? IoC:Spring立場
?????? ?????? DI:應用程序立場
?
轉載于:https://www.cnblogs.com/DreamDrive/p/4090988.html
超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生總結
以上是生活随笔為你收集整理的关于Spring的IOC和DI的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java数据结构与算法(20) - ch
- 下一篇: 数据迁移