Java 带反射的自动连线存储库

Java 带反射的自动连线存储库,java,reflection,Java,Reflection,我试图通过反射来访问我的存储库,以降低项目中的可读性复杂性。我必须用缓存表缓存3个DB表。这些表格是: I.测试参数 二、 测试真实交易标准 三、 DEV\u USER\u STDLOV 如果我不使用反射,我必须根据表名使用switch case来使用存储库,例如: 不假思索 或 或 我还需要将这些存储库与@Autowired注释一起使用。可以这样使用吗 谢谢。这里最不需要的就是反射,它不会提高可读性,但会使事情变得不必要的复杂、缓慢和难以理解 不过,只要使用更好的OO设计,就可以避免重复相

我试图通过反射来访问我的存储库,以降低项目中的可读性复杂性。我必须用缓存表缓存3个DB表。这些表格是:

I.测试参数
二、 测试真实交易标准
三、 DEV\u USER\u STDLOV

如果我不使用反射,我必须根据表名使用switch case来使用存储库,例如:

不假思索 或

我还需要将这些存储库与@Autowired注释一起使用。可以这样使用吗


谢谢。

这里最不需要的就是反射,它不会提高可读性,但会使事情变得不必要的复杂、缓慢和难以理解

不过,只要使用更好的OO设计,就可以避免重复相同的代码三次。例如,假设根据您发布的代码,您的3个实体扩展了相同的基类或实现了相同的接口BaseEntity:

private Map<String, Supplier<Collection<? extends BaseEntity>> suppliersByCacheKey = new HashMap<>();

... 

@PostConstruct
void init() {
    suppliersByCacheKey.put("fraud_parameters", () -> fraudParametersRepository.findAll());
    suppliersByCacheKey.put("fraud_real_transaction_criteria", () -> realTransactionCriteriaRepository.findAll());
    suppliersByCacheKey.put("ndvlive_ngi_stdlov", () -> ndvNgiStdlovRepository.findAll());
}
...

for (FraudCacheListEntity entity : fraudCacheListEntities) {
    String cacheKey = entity.getCacheKey();
    List<BaseEntity> listToCache = 
        new ArrayList<>(suppliersByCachKey.get(cacheKey).get());
    cachedObject.put(cacheKey, listToCache);
}

private Map这里最不需要的就是反射,它不会提高可读性,但会使事情变得不必要的复杂、缓慢和难以理解

不过,只要使用更好的OO设计,就可以避免重复相同的代码三次。例如,假设根据您发布的代码,您的3个实体扩展了相同的基类或实现了相同的接口BaseEntity:

private Map<String, Supplier<Collection<? extends BaseEntity>> suppliersByCacheKey = new HashMap<>();

... 

@PostConstruct
void init() {
    suppliersByCacheKey.put("fraud_parameters", () -> fraudParametersRepository.findAll());
    suppliersByCacheKey.put("fraud_real_transaction_criteria", () -> realTransactionCriteriaRepository.findAll());
    suppliersByCacheKey.put("ndvlive_ngi_stdlov", () -> ndvNgiStdlovRepository.findAll());
}
...

for (FraudCacheListEntity entity : fraudCacheListEntities) {
    String cacheKey = entity.getCacheKey();
    List<BaseEntity> listToCache = 
        new ArrayList<>(suppliersByCachKey.get(cacheKey).get());
    cachedObject.put(cacheKey, listToCache);
}
私有映射
java.lang.ClassNotFoundException: TestParametersRepository
java.lang.ClassNotFoundException: TestRealTransactionCriteriaRepository
java.lang.ClassNotFoundException: DevUserNgiStdlovRepository
private Map<String, Supplier<Collection<? extends BaseEntity>> suppliersByCacheKey = new HashMap<>();

... 

@PostConstruct
void init() {
    suppliersByCacheKey.put("fraud_parameters", () -> fraudParametersRepository.findAll());
    suppliersByCacheKey.put("fraud_real_transaction_criteria", () -> realTransactionCriteriaRepository.findAll());
    suppliersByCacheKey.put("ndvlive_ngi_stdlov", () -> ndvNgiStdlovRepository.findAll());
}
...

for (FraudCacheListEntity entity : fraudCacheListEntities) {
    String cacheKey = entity.getCacheKey();
    List<BaseEntity> listToCache = 
        new ArrayList<>(suppliersByCachKey.get(cacheKey).get());
    cachedObject.put(cacheKey, listToCache);
}