Java 如何获得Spring数据JPA存储库工厂?

Java 如何获得Spring数据JPA存储库工厂?,java,spring,spring-data,spring-data-jpa,Java,Spring,Spring Data,Spring Data Jpa,因为我没有得到答案,所以我尝试调整了在中给出的用于定制存储库的示例。这里有一个方法getRepository(Class repositoryInterface),它似乎是映射我的存储库覆盖的正确位置: 公共类MyRepositoryFactoryBean 扩展JpaRepositoryFactoryBean{ 受保护的RepositoryFactorySupport createRepositoryFactory(EntityManager EntityManager){ 返回新的MyRepo

因为我没有得到答案,所以我尝试调整了在中给出的用于定制存储库的示例。这里有一个方法
getRepository(Class repositoryInterface)
,它似乎是映射我的存储库覆盖的正确位置:

公共类MyRepositoryFactoryBean
扩展JpaRepositoryFactoryBean{
受保护的RepositoryFactorySupport createRepositoryFactory(EntityManager EntityManager){
返回新的MyRepositoryFactory(entityManager);
}
私有静态类MyRepositoryFactory扩展了JpaRepositoryFactory{
私人实体管理者实体管理者;
@资源
私有地图>覆盖位置;
公共MyRepositoryFactory(EntityManager EntityManager){
超级(实体管理器);
this.entityManager=entityManager;
//试验
overriderepositionals=newhashmap();
overriderepositions.put(CustomerRepository.class、Customer2Repository.class);
}
受保护对象GetTargetPository(RepositoryMetadata元数据){
返回super.getTargetPository(元数据);
//返回新的MyRepositoryImpl((类)
//metadata.getDomainClass(),entityManager);
}
受保护类getRepositoryBaseClass(RepositoryMetadata元数据){
//RepositoryMetadata可以安全地忽略,它由
//JPA仓库工厂
//检查超出范围的QueryDslJpaRepository。
返回JpaRepository.class;
}
@抑制警告(“未选中”)
@凌驾
公共E getRepository(类repositoryInterface,对象自定义实现){
如果(覆盖位置!=null){
Class override=overriderepositionals.get(repositoryInterface);
如果(覆盖!=null){
repositoryInterface=(类)重写;
}
}
返回super.getRepository(repositoryInterface,customImplementation);
}
}
}
我这样配置它:
@enableJParepositions(repositoryFactoryBeanClass=MyRepositoryFactoryBean.class)

通常,您会自动连接存储库本身,但这不起作用,因为有两个接口具有相同的类型和类型


如果我改为自动连接工厂,我可以在每次需要特定工厂时调用
getRepository
。但是我怎样才能得到这个工厂呢?SpringDataJPA是否以某种方式将其公开为bean?我在谷歌上找不到任何与此相关的信息。或者这种方法是完全错误的?

您可以使用
ApplicationContext
实例来获取
MyRepositoryFactoryBean
bean类。您所要做的就是实现
ApplicationContextAware
接口,以便访问
ApplicationContext
实例

  public class myClass implements ApplicationContextAware{
    
        private static ApplicationContext ac;
        
            @Override
            public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
                this.ac = applicationContext;
            }
        
        }
现在,您可以使用
ac.getBean(“MyRepositoryFactoryBean”)
直接从
ApplicationContext
获取工厂。一旦你有了这个bean,你就可以对它调用
getRepository