Spring的理解
Spring之IOC的理解
IOC控制反转的好处是由程序员写死的代码,变为由程序员(或用户)管理的代码
例子一
实体类
package com.parsley.dao;
public class Paper {
private String context;
public String getContext() {
return context;
}
public void setContext(String context) {
this.context = context;
}
}
service接口
package com.parsley.service;
import com.parsley.dao.Paper;
public interface Printer {
public void myPrint(Paper paper);
}
service实现类
package com.parsley.service;
import com.parsley.dao.Paper;
public class TextPrinter implements Printer{
public void myPrint(Paper paper) {
paper.setContext("打印了文本信息");
}
}
package com.parsley.service;
import com.parsley.dao.Paper;
public class ImagePrinter implements Printer{
public void myPrint(Paper paper) {
paper.setContext("打印了图片信息");
}
}
Printer接口是打印机接口
TextPrinter是有文本打印功能的打印机
ImagePrinter是有图片打印功能的打印机
测试
@Test
public void test01(){
Paper paper=new Paper();
Printer printer = new TextPrinter();
printer.myPrint(paper);
System.out.println(paper.getContext());
}
如果现在想换一种方式打印,那么是不是必须
Printer printer = new ImagePrinter();
那么这个就相当于换一个打印机来打印东西
就相当于你想打印不同的东西要搬来搬去两台打印机
而SpringIOC的方式则是由Spring管理这些东西,你想要什么就只要切换打印功能,Spring帮你搬好了打印机,你只要去Spring中设置就行了。
例子二
有一个1拖100的数据线
有100个手机(需要充电功能)(相当于controller层)
有充电头(service接口)
不同瓦数的充电头(service接口实现类)
假如你现在有一个5w的充电头(一个实现类)
这100个手机使用1拖100数据线连接5w充电头进行充电(相当于controller使用5w的这个实现类)
现在有一个需求想要使用120w快充(更换实现类)
我们看看实现这个需求两种方式有什么差别
1.使用new方式
相当于你需要去改变这100个new出来的东西
就是把这100个接口拔掉,换掉带有5w头的1拖100数据线,换一个带有120w头的1拖100数据线
2.使用Spring方法
相当于你拔掉1个接口,把这个接口从5w的头上拔下,换到120w的头上
理解上来说就是Spring管理了这些类所以你要什么,就直接换就行不需要像使用new一样一个一个换,new相当于写死了就是使用5w的头,而Spring并没有这样,而是用户自己去设置是用哪个头。