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