Spring通过实例工厂实例化bean的简单应用场景举例

Spring通过实例工厂实例化bean的简单应用场景举例

前提说明
源库只有一个,目标库存在多个,将源库里的数据同步到不同的目标库中。

后台框架
Spring+OpenJpa

由于存在多个目标库,需要配置多个baseDao(一个baseDao对应一个目标库),所有的baseDao全部实现IBaseDao接口。如图:
在这里插入图片描述
FirstDao:

public class FirstDao extends MBaseDao implements IBaseDao {
	@PersistenceContext(unitName="target_one")
	private EntityManager entityManager;
		
	public EntityManager getEntityManager() {
		return entityManager;
	}

	public void setEntityManager(EntityManager entityManager) {
		this.entityManager = entityManager;
	}
}

SecondDao:

public class SecondDao extends MBaseDao implements IBaseDao {
	@PersistenceContext(unitName="target_two")
	private EntityManager entityManager;
		
	public EntityManager getEntityManager() {
		return entityManager;
	}

	public void setEntityManager(EntityManager entityManager) {
		this.entityManager = entityManager;
	}
}

Service层:

public interface IBaseService {
	public void add(Employee emp) throws Exception;
}

public class BaseService implements IBaseService {
	private IBaseDao baseDao;
	public BaseService() {
		
	}
	
	public BaseService(IBaseDao baseDao){  // 一定要有这个有参构造器,传入的是各个目标库的baseDao。
		this.baseDao = baseDao;
	}
	
	@Override
	public void add(Employee emp) throws Exception {
		getBaseDao().mergeEntity(Employee.class, emp);
	}

	public IBaseDao getBaseDao() {
		return baseDao;
	}

	public void setBaseDao(IBaseDao baseDao) {
		this.baseDao = baseDao;
	}
}

工厂类:

/**
* 我负责生产baseService
*/
public class ServiceFactory {
	public BaseService getBaseService(IBaseDao baseDao){
		return new BaseService(baseDao);
	}
}

Spring通过工厂方法配置bean

<!-- 配置工厂实例 -->
<bean id="serviceFactory" class="com.amoeba.factory.ServiceFactory">
</bean>

<!-- 通过实例工厂创建target_one的Service方法 -->
<bean id="targetOneService" factory-bean="serviceFactory" factory-method="getBaseService">
	<constructor-arg ref="firstBaseDao"></constructor-arg>
</bean>

<!-- 通过实例工厂创建target_two的Service方法 -->
<bean id="targetTwoService" factory-bean="serviceFactory" factory-method="getBaseService">
	<constructor-arg ref="secondBaseDao"></constructor-arg>
</bean>

如此一来,只需要写一套业务代码,方便以后的维护。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值