[{"createTime":1735734952000,"id":1,"img":"hwy_ms_500_252.jpeg","link":"https://activity.huaweicloud.com/cps.html?fromacct=261f35b6-af54-4511-a2ca-910fa15905d1&utm_source=V1g3MDY4NTY=&utm_medium=cps&utm_campaign=201905","name":"华为云秒杀","status":9,"txt":"华为云38元秒杀","type":1,"updateTime":1735747411000,"userId":3},{"createTime":1736173885000,"id":2,"img":"txy_480_300.png","link":"https://cloud.tencent.com/act/cps/redirect?redirect=1077&cps_key=edb15096bfff75effaaa8c8bb66138bd&from=console","name":"腾讯云秒杀","status":9,"txt":"腾讯云限量秒杀","type":1,"updateTime":1736173885000,"userId":3},{"createTime":1736177492000,"id":3,"img":"aly_251_140.png","link":"https://www.aliyun.com/minisite/goods?userCode=pwp8kmv3","memo":"","name":"阿里云","status":9,"txt":"阿里云2折起","type":1,"updateTime":1736177492000,"userId":3},{"createTime":1735660800000,"id":4,"img":"vultr_560_300.png","link":"https://www.vultr.com/?ref=9603742-8H","name":"Vultr","status":9,"txt":"Vultr送$100","type":1,"updateTime":1735660800000,"userId":3},{"createTime":1735660800000,"id":5,"img":"jdy_663_320.jpg","link":"https://3.cn/2ay1-e5t","name":"京东云","status":9,"txt":"京东云特惠专区","type":1,"updateTime":1735660800000,"userId":3},{"createTime":1735660800000,"id":6,"img":"new_ads.png","link":"https://www.iodraw.com/ads","name":"发布广告","status":9,"txt":"发布广告","type":1,"updateTime":1735660800000,"userId":3},{"createTime":1735660800000,"id":7,"img":"yun_910_50.png","link":"https://activity.huaweicloud.com/discount_area_v5/index.html?fromacct=261f35b6-af54-4511-a2ca-910fa15905d1&utm_source=aXhpYW95YW5nOA===&utm_medium=cps&utm_campaign=201905","name":"底部","status":9,"txt":"高性能云服务器2折起","type":2,"updateTime":1735660800000,"userId":3}]
最近在写一个功能时,一个接口有多个实现,要求在service实现类的调用要根据配置文件进行调整,不同的配置,调用不同的处理方式,下面就写个例子,做一下记录吧
首先,做好yaml文件的配置
my-config: #集成方式:轮询polling/回调callback integrate-mode: polling
创建service接口类
public interface MyTransService { void dealFile(String filePath); }
创建两种类,实现上诉接口,在加@Service注解的时候,添加上这个实现类的实例名
轮询方式
@Service("polling") public class OfficeTransServiceImpl implements
MyTransService { @Override void dealFile(String filePath){ // do something ···
} }
回调方式
@Service("callback") public class PoiTransServiceImpl implements
MyTransService { @Override void dealFile(String filePath){ // do something ···
} }
接下来就是怎么调用啦
调用的话使用的是@Resource注解,这个注解的name属性,可以取到配置文件中的值
@Service public class MyServiceImpl { @Resource(name =
"${my-config.integrate-mode}") private MyTransService myTransService ; public
void dealFile() { officeTransService.dealFile(); } }
这样,就能够根据具体的配置,控制具体调用哪个实现啦!
PS
:@Resource除了读取配置文件这种方式去决定调用哪个类,还可以将配置写死,如果不需要根据配置去改变,可以使用下面两种方式,但是要切换的话就要通过改代码来实现了:
方式一:@Resource(name="polling")
方式二:@Autowired @Qualifier("polling")
对你有帮助就点个赞呗~~