书接上文,说了半天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的自动加载处理等等,省去很多很多代码,所以优势就更明显了。

以上。

最后修改日期: 2017年9月8日

作者