spring动态获取接口的不同实现类

在项目中,通过接口获取并处理新闻数据时,发现原本两个相似的方法可以复用。改造后遇到接口实现类的Mapper未实例化的问题。原因在于使用new关键字创建的对象不受Spring管理,导致注入失效。为解决此问题,尝试了在接口参数中传递Mapper和修改工厂类的临时方案。最终,了解到Spring可以动态获取接口的实现类,实现了正确的解决方案。
摘要由CSDN通过智能技术生成

最近做项目,有个需求是和外部对接,从接口获取新闻数据,把数据和缓存中的数据对比,多了的添加到数据库,少了的删掉。接口有两个,一开始我是在业务类里写了两个方法,代码太长,简单说就是两个部分:

public Object saveANews() {
	//1、获取A接口新闻列表
    //2、和缓存对比,存数据到数据库
}

public Object saveBNews() {
	//1、获取B新闻列表
    //2、和缓存对比,存数据到数据库
}

写完后我发现,因为操作的是数据库的同一张表,2的部分代码完全一模一样,只有1的部分不同,而1的部分其实就只有一行代码。。。

这必须得复用啊,而且是一个业务,也没必要分别用两个方法,于是我改成了这样:

//业务接口实现方法
public Object saveNews(NewsUtilService service) {
	//1、获取接口新闻列表
    List<NewsVO> list = service.queryNews();
    //2、和缓存对比,存数据到数据库
}

//定义新闻数据接口
public interface NewsUtilService {
    List<NewsVO> queryNews();
}

//接口的两个实现类
@Service
public class ANewsDataServiceImpl implements NewsUtilService {

    @Autowired
	private NewsDataMapper newsDataMapper;

    @Override
	public List<NewsVO> queryNews(){
		
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值