假设
AClass和BClass都implement了接口AInterface的方法fun
调用的时候
要不 AInterface obj = new AClass();
要不 AInterface obj = new BClass();
然后 obj.fun();
因为老子的代码中有很多这样的的代码段
AInterface obj = new AClass();
obj.fun();
老子想拿BClass替换AClass时,只想改配置文件,代码不想改。
也就是老子现在就想写这样的代码
AInterface obj = new xxxx();
xxxx.fun();
当使用spring实现时
新建一个辅助类
public class AHelper{
AInterface interface;
public void fun(){
this.interface.fun();
}
public void setInterface(AInterface input){
this.interface = iput;
}
}
配置文件中,将AClass替换成BClass就能完成切换
<bean id="AHelper" class="AHelper">
<property name="interface" ref="a" />//将成员变量interface注入成AClass
//这里用的是ref,而不是value,因为AHelper中的成员interface不是一个简单的值,
//如果他是简单的string,int就能用value,于是这里只能指定bean的id了,用ref,不用value
//就相当于new AClass,然后给interface赋值这个new出来的对象。
</bean>
<bean id="a" class="AClass" />
<bean id="b" class="BClass" />
这样就能达到目的
AHelper h = (AHelper)context.getBean("AHelper");
h.fun();