javascript
Spring学习(二)Spring IoC 和 DI 简介
本文借鑒:Spring學習(特此感謝!)
一、IOC(控制反轉(zhuǎn))
定義:反轉(zhuǎn)控制 (Inversion Of Control)的縮寫,即創(chuàng)建對象的反轉(zhuǎn)控制。
正向控制:若要使用某個對象,需要自己去負責對象的創(chuàng)建。
反向控制:若要使用某個對象,只需要從 Spring 容器中獲取需要使用的對象,不關(guān)心對象的創(chuàng)建過程,也就是把創(chuàng)建對象的控制權(quán)反轉(zhuǎn)給了Spring框架。
例子:在現(xiàn)實生活中,人們要用到一樣東西的時候,第一反應(yīng)就是去找到這件東西,比如想喝新鮮橙汁,在沒有飲品店的日子里,最直觀的做法就是:買果汁機、買橙子,然后準備開水。
值得注意的是:這些都是你自己“主動”創(chuàng)造的過程,也就是說一杯橙汁需要你自己創(chuàng)造。
然而到了今時今日,由于飲品店的盛行,當我們想喝橙汁時,第一想法就轉(zhuǎn)換成了找到飲品店的聯(lián)系方式,通過電話等渠道描述你的需要、地址、聯(lián)系方式等,下訂單等待,過一會兒就會有人送來橙汁了。
值得注意的是:你并沒有“主動”去創(chuàng)造橙汁,橙汁是由飲品店創(chuàng)造的,而不是你,然而也完全達到了你的要求,甚至比你創(chuàng)造的要好上那么一些。
代碼示例:(這里使用的是Spring4.3.0版本的jar包)
pojo
/*** 這是一個模擬果汁模型的pojo*/ public class Source implements Serializable {private String fruit; // 類型private String sugar; // 糖分描述private String size; // 大小杯/*getter和setter方法暫時省略*/ }?Spring配置文件
<?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"><bean name="source" class="pojo.Source"><property name="fruit" value="橙子"/><property name="sugar" value="多糖"/><property name="size" value="超大杯"/></bean> </beans>測試類
public class TestSpring {@Testpublic void test() {//1、使用ApplicationContext類讀取xml配置文件生成bean工廠(bean工廠為了控制反轉(zhuǎn)時獲取對象用)ApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"applicationContext.xml"});//2、實例化bean(這里實例化的bean是從bean工廠里面獲取的,與傳統(tǒng)自己new一個對象的方式不同,實現(xiàn)控制反轉(zhuǎn))Source source = (Source) context.getBean("source");System.out.println(source.getFruit());System.out.println(source.getSugar());System.out.println(source.getSize());} }?
?二、DI(依賴注入)
定義:指 Spring 創(chuàng)建對象的過程中,將對象依賴屬性(簡單值,集合,對象)通過配置設(shè)置給該對象。
實現(xiàn)原理:
①?讀取標注或者配置文件,看看JuiceMaker依賴的是哪個Source,拿到類名
②?使用反射的API,基于類名實例化對應(yīng)的對象實例
③?將對象實例,通過構(gòu)造函數(shù)或者 setter,傳遞給 JuiceMaker
代碼示例:(這里使用的是Spring4.3.0版本的jar包)?
pojo
/*** 果汁制造者對象*/ public class JuiceMaker {// 依賴了一個 Source 對象private Source source;/* setter and getter */public String makeJuice() {String juice = "xxx用戶點了一杯" + source.getFruit() + source.getSugar() + source.getSize();return juice;}public Source getSource() {return source;}public void setSource(Source source) {this.source = source;} }Spring配置文件
<?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"><!--配置一個名叫source的bean--><bean name="source" class="pojo.Source"><property name="fruit" value="橙子"/><property name="sugar" value="多糖"/><property name="size" value="超大杯"/></bean><!--配置一個名叫juickMaker的bean,把上面配置的名為source的bean通過ref屬性注入到這個bean內(nèi)--><bean name="juiceMaker" class="pojo.JuiceMaker"><property name="source" ref="source" /></bean> </beans>測試類
public class TestSpring {@Testpublic void test() {//1、使用ApplicationContext類讀取xml配置文件生成bean工廠(bean工廠為了控制反轉(zhuǎn)時獲取對象用)ApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"applicationContext.xml"});//2、實例化bean(這里實例化的bean是從bean工廠里面獲取的,與傳統(tǒng)自己new一個對象的方式不同,實現(xiàn)控制反轉(zhuǎn))Source source = (Source) context.getBean("source");System.out.println(source.getFruit());System.out.println(source.getSugar());System.out.println(source.getSize());//3、實例化一個名叫juiceMaker的bean,此bean內(nèi)注入上面的sourceJuiceMaker juiceMaker = (JuiceMaker) context.getBean("juiceMaker");System.out.println(juiceMaker.makeJuice());} }?PS:第2部分的代碼不寫也能實現(xiàn)bean的注入,因為在XML中已經(jīng)進行了bean的配置并通過ref屬性將source注入到j(luò)uiceMaker中去了。
轉(zhuǎn)載于:https://www.cnblogs.com/riches/p/11491874.html
總結(jié)
以上是生活随笔為你收集整理的Spring学习(二)Spring IoC 和 DI 简介的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python变量与常量内容:
- 下一篇: 基于ARM A53开发板,使用按键中断及