书接上文,说了半天Spring的好处,
小明又问:Spring不也是Java实现的嘛,说的这么好,难道不能纯Java实现?
回答:当然是可以的,只是为了照顾不明真相的群众,所以封装了这个概念。
这里就要提到IOC 控制反转,Spring也是通过它实现低耦合的优势的。
废话不多说直接代码
还是原来的Car类,不过我们要加一个 成员变量指向一个空接口
public class ObjCar { public InterAction mInterAction; public void setMoveDao(InterAction inMoveDao) { this.mInterAction = inMoveDao; } ... //同前,此处略 }
一个空接口
public interface InterAction {}
然后实现这个接口的两个具体干活类,比如Move或者Log输出
public class DoLogOutput implements InterAction { public void Output2File(String name) { System.out.println("Output2File " + name);} public void Output2DB(String name) { System.out.println("Output2DB " + name);} public void Output2Console(String name) { System.out.println("Output2Console " + name);} }
public class DoLogOutput implements InterAction { public void Output2File(String name) { System.out.println("Output2File " + name);} public void Output2DB(String name) { System.out.println("Output2DB " + name);} public void Output2Console(String name) { System.out.println("Output2Console " + name);} }
通过这中方式,我们其实也实现了Spring的那种数据和动作方法的分离,也就是低耦合
具体使用的时候
public static void dowork() { ObjCar car1 = new ObjCar("Car1", "Red"); //数据Bean ObjCar car2 = new ObjCar("Car2", "Green"); //DAO底层处理类 DoMoveWork mDoMoveWork = new DoMoveWork(); DoLogOutput mDoLogOutput = new DoLogOutput(); //业务逻辑部分 car1.setMoveDao(mDoMoveWork); //装配干活类,开始干活 ((DoMoveWork) car1.mInterAction).move(car1.getStrCarName(),car1.getStrCarColor(),car1.getStrSpeed()); ((DoMoveWork) car1.mInterAction).getColor(car1.getStrCarName(),car1.getStrCarColor()); ((DoMoveWork) car1.mInterAction).getSpeed(car1.getStrCarName(),car1.getStrSpeed()); //可以装配其他的干活类,只要是一样的接口 car1.setMoveDao(mDoLogOutput); ((DoLogOutput) car1.mInterAction).Output2File(car1.getStrCarName()); ((DoLogOutput) car1.mInterAction).Output2DB(car1.getStrCarName()); ((DoLogOutput) car1.mInterAction).Output2Console(car1.getStrCarName()); //当然其他的数据Bean如果有这个接口可以传入,那也是一样的分分钟可以调用 System.out.println("----------------------------"); ObjPerson ObjPerson1 = new ObjPerson("ObjPerson1", "Yellow"); ObjPerson1.setMoveDao(mDoLogOutput); ((DoLogOutput) ObjPerson1.mInterAction).Output2File(ObjPerson1.getStrName()); ((DoLogOutput) ObjPerson1.mInterAction).Output2DB(ObjPerson1.getStrName()); ((DoLogOutput) ObjPerson1.mInterAction).Output2Console(ObjPerson1.getStrName()); }
当然,通过比较我们可以看到Spring从代码美观和简洁度上的优势还是很明显的。上面的只是最简单的例子,如果项目代码通过这种方式组织,对于程序猿的要求就高了。
另外Spring不光提供这一点优势,通过DI,Bean的自动加载处理等等,省去很多很多代码,所以优势就更明显了。
以上。