java在控制器中使用@Autowired和@Qualifier更改服务的数据源
我刚开始使用Spring boot,现在遇到了一个问题
我有一个三层的应用程序,控制器、服务和存储库。 TL:DR,在这里找到我的设置图:
那我该怎么做呢?能够在控制器类中切换存储库吗
控制器调用该服务,然后该服务使用存储库中的类返回正确的数据(在需要时执行逻辑魔术之后)。我还使用Hibernate和H2 inmemory来简化SQL连接,但是出于测试目的,我希望在另一个存储库类中使用硬编码的数据和方法。我的控制器通过服务使用H2 inmem数据源,我的测试类使用硬编码数据源
使用简单的依赖项注入,我可以将所需的respository类添加到服务类构造函数中,这取决于使用测试类或控制器类
然而,我想使用@Autowired
注释,并发现可以在服务类中使用@Qualifier
在自动连接的repo类之间切换。然而,我不想在服务类中这样做(在那里硬编码),而是动态地这样做,让控制器或测试类注入数据源选择
这可能吗?我该怎么做
# 1 楼答案
您应该在ServiceImpl类的顶部使用
@service
注释 然后是控制器中的@autowired
服务# 2 楼答案
您的包结构应如下所示:
实体示例:
存储库示例:
服务示例:
服务实现的示例:
控制器示例: