Java 动态切换两个不同的类声明

2019-05-26 12:29:11 +08:00
 beryl

使用:

// case 1

@Resource("testService")
private RedisClient redisClient;


// ...
// 省略重写的 redis 方法

// case 2

@Resource("testService")
private RedisClusterClient redisClient;


// ...
// 省略重写的 redis 方法

期望统一成一个:

@Resource("testService")
private MyRedisClient redisClient;


// ...
// 省略重写的 redis 方法

想根据不同配置,MyRedisClient 代理到不同的单例或者集群模式的类。

因为不同环境有的是单点的,要使用 case1 的方式, 有的是 cluster 模式,要使用 case2, 但是这样要切换代码才可以。

想通过配置方式不知道怎么实现,想到可能需要通过代理模式实现,但是具体细节一直没有搞清楚?

Java 动态代理 工厂模式

3339 次点击
所在节点    程序员
28 条回复
beryl
2019-05-26 17:04:16 +08:00
@undeflife 有没有一种,不满足『最好有实现相同的接口或父』,的实现方式呢,thx
undeflife
2019-05-26 18:00:11 +08:00
@beryl 使用工厂类咯
beryl
2019-05-26 20:04:54 +08:00
@undeflife 对设计模式不是很清楚,虽然不是很懂, 有种朦胧感, 不过还是感谢。
我自己再研究下吧。
xuanbg
2019-05-27 07:46:36 +08:00
没明白什么需求,只看到一个集群一个单机的区别。但 Redis 功能上来讲集群和单机并没有什么不同啊?为啥要写两个方法?
yxjn
2019-05-27 10:50:55 +08:00
spring boot 很简单,只要在配置文件里修改即可。注册的 redistemplate 即是相应的 redis 配置下的。
palmers
2019-05-27 11:48:49 +08:00
我理解 lz 的需求是需要动态切换 redis 的数据源, 在向上抽象一个委托类或适配器来执行业务 然后利用观察者模式 或者工厂 bean 来切换 redis 数据源 我觉得这个方法可以办到
beryl
2019-05-27 13:57:43 +08:00
@palmers 大体思路可以明白,可能是现在对这些不太透彻理解,所以细节实现还是没能实现。
beryl
2019-05-27 13:58:03 +08:00
@yxjn 然而不是 spring boot ...

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/567748

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX