- IOC:控制翻转
(Inversion of Control) 理解成抽象工厂
翻转控制:就是创建对象的权利由开发人员自己控制New,转到了由容器来控制。 - DI:依赖注入
(Dependency Injection)
依赖注入:就是在通过容器开创建对象的时候,在对象的初始化是可以给一些属性、构造方法的参数等注入默认值(可以是复杂的类型).
范例:按照需求组装一台打印机:纸张(A4、B5)、墨盒(彩色、黑白)
面向接口编程
消费者:任意组装(配置)
1.定义接口(纸张,墨盒)
public interface Paper {
//定义纸张的规格
public String getSize();
}
public interface Ink {
//定义规格
public String getColor();
}
2.接口实现类
纸张实现类
package com.oupeng.paper.impl;
import com.oupeng.paper.Paper;
public class A4Paper implements Paper {
@Override
public String getSize() {
return "A4 ";
}
}
package com.oupeng.paper.impl;
import com.oupeng.paper.Paper;
public class B5Paper implements Paper {
@Override
public String getSize() {
return "B5";
}
}
墨盒实现类
package com.oupeng.ink.impl;
import com.oupeng.ink.Ink;
public class ColorInk implements Ink {
@Override
public String getColor() {
return "彩色墨盒";
}
}
package com.oupeng.ink.impl;
import com.oupeng.ink.Ink;
public class GrayInk implements Ink {
@Override
public String getColor() {
return "黑白墨盒";
}
}
3.打印机类
package com.oupeng.printer;
import com.oupeng.ink.Ink;
import com.oupeng.paper.Paper;
public class Printer {
private Paper Paper; //纸张
private Ink ink;//墨盒
public Paper getPaper() {
return Paper;
}
public void setPaper(Paper paper) {
Paper = paper;
}
public Ink getInk() {
return ink;
}
public void setInk(Ink ink) {
this.ink = ink;
}
//实现打印机的打印功能
public void printInfo() {
System.out.println("打印机正在"+this.getPaper().getSize()+"纸张上使用"+this.getInk().getColor()+"打印文件");
}
}
4.配置文件
<!-- 配置A4纸张 -->
<bean id="A4" class="com.oupeng.paper.impl.A4Paper"></bean>
<!-- 配置B5纸张 -->
<bean id="B5" class="com.oupeng.paper.impl.B5Paper"></bean>
<!-- 配置彩色墨盒 -->
<bean id="color" class="com.oupeng.ink.impl.ColorInk"></bean>
<!-- 配置黑白墨盒 -->
<bean id="gray" class="com.oupeng.ink.impl.GrayInk"></bean>
<!-- 组装打印机 ref用谁写谁 -->
<bean id="printer" class="com.oupeng.printer.Printer">
<property name="paper" ref="A4"></property>
<property name="ink" ref="color"></property>
</bean>
5.测试
package com.oupeng.test;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.oupeng.printer.Printer;
public class TestPrinter {
@Test
public void testPrinter() {
ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
Printer printer=(Printer) context.getBean("printer");
printer.printInfo(); //调用业务逻辑
}
}
执行结果
打印机正在A4纸张上使用彩色墨盒打印文件