Java 使用扩展泛型自动连接SpringBean的最佳实践

Java 使用扩展泛型自动连接SpringBean的最佳实践,java,spring,generics,inheritance,autowired,Java,Spring,Generics,Inheritance,Autowired,我正在JavaSpring后端中设置一个通用服务结构。我有一个签名如下的服务 public class GenericService<T, S extends ObjectService<T>> { ... } 我还有3个实现ObjectService接口的服务: UserService实现ObjectService LocationService实现ObjectService CompanyService实现ObjectService 在另一项服务中,我想自动连接

我正在JavaSpring后端中设置一个通用服务结构。我有一个签名如下的服务

public class GenericService<T, S extends ObjectService<T>> { ... }
我还有3个实现ObjectService接口的服务:

  • UserService实现ObjectService
  • LocationService实现ObjectService
  • CompanyService实现ObjectService
在另一项服务中,我想自动连接以下具体服务:

@Autowired
private GenericService<User, UserService> genericUserExportService;

@Autowired
private GenericService<Location, LocationService> genericLocationExportService;

@Autowired
private GenericService<Company, CompanyService> genericCompanyExportService;
我已经找到了从GenericService为用户、地点和公司创建子类的解决方案,但我不喜欢它,因为我需要生成许多空的子类,例如:

public class GenericUserService extends GenericService<User, UserService> { ... }
公共类GenericUserService扩展了GenericService{…}

对于我的问题,有更好的解决方案吗?

可以使用限定符“解决”这一问题。您可以使用类名
@Autowire
,也可以添加
@Qualifier
注释以提供目标类名。问题:根据您请求中在用户、位置或公司之间切换的条件,限定符是如何解决的那个问题?我的问题是,spring无法自动连接泛型类型S的objectService Bean,我正在寻找一个解决方案,但如果我没有为每种情况创建子类,那么我需要创建子类来使用限定符?@Jayesh在这种特定情况下,我在调用函数中知道哪个服务(类型为User、Location或Company)调用。这可以使用限定符“解决”。您可以使用类名
@Autowire
,也可以添加
@Qualifier
注释以提供目标类名。问题:根据请求中的什么条件,您可以在用户、位置或公司之间切换?限定符如何解决该问题?我的问题是,spring无法自动连接泛型类型S的objectService Bean,我正在寻找一个解决方案,但如果我没有为每种情况创建子类,那么我需要创建子类来使用限定符?@Jayesh在这种特定情况下,我在调用函数中知道哪个服务(类型为User、Location或Company)打电话。
expected single matching bean but found 3
public class GenericUserService extends GenericService<User, UserService> { ... }