根据前台返回的不同参数,选择一个接口不同的实现类来实现不同业务逻辑,我们用到了proxy代理类。
首先是spring.xml 配置文件 如下:(proxy 表示代理类 ××ServiceImpl 表示实现类)
<bean id="接口名称" >
<property name="target" ref="proxy"></property>
</bean>
<bean id="proxy“ class= ”代理类地址“>
<property name="××ServiceImpl1" ref="××ServiceImpl1"></property>
<property name="××ServiceImpl2" ref="××ServiceImpl2"></property>
</bean>
<bean id="××ServiceImpl1" class=""></bean>
<bean id="××ServiceImpl2" class=""></bean>
代理类代码
public class proxy implements 接口 {
//获取两个实现类
public 接口 ××ServiceImpl1 ;
public 接口 ××ServiceImpl2 ;
//获取不同实现类的成员变量 service
public 接口 service;
三者的get set 方法;
public 接口 getService(){
if(判断使用哪个实现类的条件){
service = ××ServiceImpl1 ;
}else{
service = ××ServiceImpl12;
}
}
}
具体实例如下:
一、applicationContext.xml中注册bean,代理类极其实现类都放在com.hd.impl.文件夹下,接口在com.hd文件夹IService
代理类极其实现类注册:
<bean id="ABC_Service" parent="baseTransactionProxy">
<property name="target" ref="ServiceImplProxy"></property>
</bean>
<bean id="AServiceImpl" class="com.hd.impl.AServiceImpl">
<bean id="BServiceImpl" class="com.hd.impl.BServiceImpl">
<bean id="CServiceImpl" class="com.hd.impl.CServiceImpl">
代理类实现类继承
<bean id="ServiceImplProxy" class="com.hd.impl.ServiceImplProxy">
<property name="AServiceImpl" ref="AServiceImpl"></property>
<property name="BServiceImpl" ref="BServiceImpl"></property>
<property name="CServiceImpl" ref="CServiceImpl"></property>
</bean>
二、代理类代码
public class ServiceImplProxy implements IService{
private IService service;//代理类中要使用的实现类
private AServiceImpl aservice;
private BServiceImpl bservice;
public AServiceImpl getAservice() {
return aservice;
}
public void setAservice(AServiceImpl aservice) {
this.aservice = aservice;
}
public BServiceImpl getBservice() {
return bservice;
}
public void setBservice(BServiceImpl bservice) {
this.bservice = bservice;
}
//判断使用哪个实现类
public IService getService(String param){
if("a".equals(param)){
service = aservice;
}else{
service = bservice;
}
}
public void A(String param){
getService(String param).A();
}
}