我有几个扩展单个界面的接口。
我需要在@PostCostruct方法中将这些接口添加到Map。
问题是我需要从数据库中检索@Service类名,我不知道将接口放在地图中...
我会尝试更好地解释
我有一般服务界面
public interface IVehicleServiceGeneral{
//methods...
}
然后我有几个接口扩展了一般接口。
public interface IService1 extends IVehicleServiceGeneral{
}
public interface IService2 extends IVehicleServiceGeneral{
}
这些类的具体实现使用@Service(“service1Name”),@ Service(“service2Name”)等注释......
然后从数据库中检索我的供应商
public class Supplier {
private long id;
private String serviceName;
//getters and setters
}
最后我需要创建地图,因为我需要在运行时基于供应商访问实现,我创建了一个ContextAware类来获取我的bean名称,但接口不是bean ...我也试过将@Qualifier放在界面上,但显然它不起作用......如何将界面放在地图中?
@PostConstruct
private void createServiceMap(){
serviceMap = new HashMap<OBUSupplier, IVehicleServiceGeneral>();
List<Supplier> suppliers = supplierService.findAll();
for(Supplier s : suppliers) {
serviceMap.put(s, contextAware.getBean(s.getServiceName()));
}
}
答案 0 :(得分:0)
您可以像这样创建IVehicleServiceGeneral
实例映射:
class SomeClass {
Map vehicleServiceGeneralInstanceMap = new HashMap();
SomeClass(Set<IVehicleServiceGeneral> instances) {
instances.forEach(i -> vehicleServiceGeneralInstanceMap.put(i.getServiceName(), i));
}
private void createServiceMap() {
Map serviceMap = new HashMap<OBUSupplier, IVehicleServiceGeneral>();
List<Supplier> suppliers = supplierService.findAll();
for(Supplier s : suppliers) {
serviceMap.put(s, vehicleServiceGeneralInstanceMap.get(s.getServiceName()));
}
}
您唯一需要的是IVehicleServiceGeneral#getServiceName
,Service1, 2
需要使用DB中的专有名称覆盖。