1. 程式人生 > >spring之控制反轉

spring之控制反轉

構建 classpath col 技術 節點 ace version urn 星期

IOC (Inversion of Control) 控制反轉

我的理解:將創建對象的控制權從代碼本身轉交給了外部容器(spring容器)。

1.將組件對象(業務對象)的控制權從代碼本身轉移到外部容器。

在代碼中不使用關鍵字new來構建一個業務實例,而是在配置文件中。通過xml節點知道容器如何對內存中構建的對應類型的對象名稱做命名

DI依賴註入(Dependency Injection)

DI依賴註入:創建對象實例時,為這個對象註入屬性值或其它對象實例(域屬性)。

<!-- ioc-->

<bean id="happyService" class="cn.happy.Service.HappyService"

>

<!-- DI 屬性值 依賴註入 -->

<property name="info" value="Spring"></property>

下面來一個墨盒的案例

Ink 顏色 paper 紙張 print 打印機

/**
* Created by Administrator on 2017/7/23. 墨盒的接口
*/
public interface Ink {

//獲取顏色的方法

public String getColor();


/**
* Created by Administrator on 2017/7/23. 實現類

什麽顏色的墨盒
*/
public class

GrayInk implements Ink{
public String getColor() {
return "黑白墨盒";
}
}

/**
* Created by Administrator on 2017/7/23. 紙張接口
*/
public interface Paper {
public String getPaper();
}


/**
* Created by Administrator on 2017/7/23. 實現類 B5類型的紙張
*/
public class B5Paper implements Paper{
public String getPaper() {
return

"B5紙";
}
}

**
* Created by Administrator on 2017/7/23. 打印機
*/
public class Printer {

域屬性:
private Ink ink;
private Paper paper;
public void print(){
System.out.println("用"+ink.getColor()+"\t顏色的墨盒在"+paper.getPaper()+"\t類型的紙張打印出星期三出去玩兒!沒毛病啊");
}
public Ink getInk() {
return ink;
}

public void setInk(Ink ink) {
this.ink = ink;
}
public Paper getPaper() {
return paper;
}
public void setPaper(Paper paper) {
this.paper = paper;
}
}

配置文件:

<!-- IOC -->
<bean id="happyService" class="cn.happy.Service.HappyService">
<!-- DI 屬性值 依賴註入-->
<property name="info" value="Spring"></property>
</bean>
<!--這是彩色墨盒 -->
<bean id="colorInk" class="cn.happy.printer.ink.ColorInk"></bean>

<!--這是紙 -->
<bean id="b5Paper" class="cn.happy.printer.paper.B5Paper"></bean>
<bean id="a4Paper" class="cn.happy.printer.paper.A4Paper"></bean>

<!--這是打印機 -->
<bean id="pinter" class="cn.happy.printer.print.Printer">
<property name="ink" ref="colorInk"></property>
<property name="paper" ref="b5Paper"></property>
</bean>

測試類:

public class SpringTest0723 {
@Test
public void test02(){
ApplicationContext ct= new ClassPathXmlApplicationContext("applicationContext.xml");
Printer pp =(Printer)ct.getBean("pinter");
pp.print();
}

測試結果:

技術分享

spring之控制反轉