java - 如何使用未添加到 Spring 上下文的 Spring 创建 JPA 实现?
问题描述
我想将使用 Spring 的缓存和注释添加到使用 Spring Data 的存储库中,但我不希望将缓存注释添加到扩展 JpaRepository 接口以分离关注点的同一接口。
我想围绕 Spring JPA 存储库创建一个包装器,定义如下:
@NoRepositoryBean
public interface MyRepository extends JpaRepository<MyEntity, Long>{
MyEntity findOneByMyAttribute(String myAttribute);
}
public interface MyRepositorySpring extends MyRepository {}
Spring 默认创建一个实现并将其添加到 beans 上下文中,即使没有@Repository
注释存在。
我的问题是我想在上下文中完全控制 bean。我想创建一个这样的包装器:
public class MyCachedRepository extends MyRepository {
private final MyRepository wrappedRepository;
@Cacheable
MyEntity findOneByMyAttribute(String myAttribute){
wrappedRepository.get(myAttribute);
}
}
Spring Data创建的实现在哪里wrappedRepository
,然后创建配置如下:
@Configuration
public class MyConf {
@Bean
public MyRepository myRepository() {
return new MyCachedRepository(myJpaRepository());
}
private MyRepository myJpaRepository() {
//here I would have the code that generates the implementation
}
}
像这样,我总是可以让我的代码注入一个myRepository
bean,并让配置决定上下文中的 bean 是包装存储库还是 jpa 之一,因为始终只有一个。
有没有办法做到这一点?
解决方案
推荐阅读
- r - 如何在格子条件标签条中插入希腊字母?
- javascript - 方法返回 id 但不保存其他数据点
- hive - 在mapr中理解hive
- python - 如何仅使用 car、cdr、cons 和其他函数拆分列表(python)
- maven - IntelliJ 社区版 2018.2 无法导入maven项目:详见日志
- linux - BlueZ:不使用 sdptool 命令添加服务、属性和配置文件
- ios - 计算属性内的计算属性
- ibm-doors - 如何使用 DXL 脚本显示表格?
- ibm-midrange - 从 IFS 读取多个文件
- amazon-web-services - AWS Lambda 模板看不到我自己的存储桶