在Spring中如何处理配置动态代理生成不同bean实现?

alvise1 2014-11-07 06:30:40
最近在做一个老系统的数据库移植工作,从oracle 一直到mysql,但是由于mysql 数据不完整,需要先查询mysql,如果没有再去查oracle,待完整后再去掉oracle。
我的想法是,抽象出dao接口,然后2套实现逻辑,最后用代理模式处理先后查询。

代码如下:

public interface UserDAO {
public void find();
}

class UserDAOOracleImpl implements UserDAO {
public void find()..
}

class UserDAOMysqlImpl implements UserDAO {
public void find()..
}


然后是动态代理方式,不想每个dao写一个代理类


public class DaoProxy implements InvocationHandler {

private Object oracleDaoImpl;
private Object mysqlDaoImpl;

public DaoCacheProxy(Object oracleDaoImpl, Object mysqlDaoImpl) {
this.oracleDaoImpl= oracleDaoImpl;
this.mysqlDaoImpl= mysqlDaoImpl;
}

@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
Object result = method.invoke(mysqlDaoImpl, args);
if (result == null) {
result = method.invoke(oracleDaoImpl, args);
}
return result;
}

}


后来发现没办法在spring里面实例化出来需要的bean,想了不少解决方案,AOP,FactorBean等等 都没有好的方法
不知道各位大侠有什么好的方式来处理这个需求,请不吝赐教。谢谢。


...全文
425 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
程序袁_哈哈 2014-11-11
  • 打赏
  • 举报
回复
引用 8 楼 alvise1 的回复:
不是要直接就改数据源就可以的,DAO实现根本就不一样呢 要用适配器模式的话,也是每个dao都得在做一个适配器?
不需要的,所谓适配器就是把两个本来无法对接的东西,通过适配器就可以把这两个给对接起来。
tony4geek 2014-11-10
  • 打赏
  • 举报
回复
alvise1 2014-11-10
  • 打赏
  • 举报
回复
具体一点是这样: 1.老系统已经DAO接口都抽象好了。所以可以直接实现。 2.用的是JdbcTemplet方式,sql不兼容,不可能一套dao实现。 3.这个系统估计将会mysql和oracle并存相当长一段时间,所以不用考虑以后重构的麻烦。 最后,我现在是每个dao接口实现一个定制化的proxy来完成的,我就是想用能一个proxy搞定所有的,或者其他简便方法,谢谢
alvise1 2014-11-10
  • 打赏
  • 举报
回复
不是要直接就改数据源就可以的,DAO实现根本就不一样呢 要用适配器模式的话,也是每个dao都得在做一个适配器?
疯狂熊猫人 2014-11-09
  • 打赏
  • 举报
回复
如果是单纯的没有办法创建XXXimpl的bean,那么你只需要在定义bean的时候加上Qualifier,这样就可以创建一个接口对应多个实现类时的bean。
attilax 2014-11-08
  • 打赏
  • 举报
回复
这个应该threadlocal 配合 aop可以实现....
或者使用adapter方式,,,在oracle的dao添加个dao的接口...
类似
  • 打赏
  • 举报
回复
一套DAO也是可以的呀,双向相同功能;然后在Spring把这个DAO配置两个实例,一个用Oracle的SessionFactory另外一个用MYSQL的SessionFactory即可。
Mr_JieLQ 2014-11-07
  • 打赏
  • 举报
回复
至于你说的是否查到数据,这个在java里进行简单的逻辑判断即可
Mr_JieLQ 2014-11-07
  • 打赏
  • 举报
回复
感觉弄巧成拙,你这么写,Oracle去除后,再重构又是麻烦事,简单点,两个数据源,两套dao,清晰而独立,待数据合并后,去其一即可

67,549

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧