如何检索给定域类的spring数据存储库实例?

2022-09-01 22:19:27

给定某个类中所有弹簧数据存储库的列表:Bar

@Autowired
private List<Repository> repositories;

如何在上面的列表中找到现有域类的存储库?Foo

假设存在以下内容:

@Entity
public class Foo {
  ...
}

public interface FooRepository extends JpaRepository<Foo, String> {}

答案 1

Spring Data Commons 包含一个类,该类采用 a 来查找其中定义的所有存储库 bean,并公开一个 API 以按域类(通过 )获取这些实例。RepositoriesListableBeanFactory….getRepository(Class<?> type)

应谨慎使用此类。由于存储库实例正在进行一些严重的代理生成,因此您必须确保在创建过程中尽可能晚地创建实例。首选方法是通过侦听 来实现和创建实例。RepositoriesApplicationContextApplicationListenerContextRefreshedEvent

如果您正在编写Web应用程序,最安全的使用方法是将存储库引导到由 中创建并放置(有关详细信息,请参阅Spring MVC的参考文档RepositoriesApplicationContextContextLoaderListenerRepositories


答案 2
@Service
public class GenericRepository {

    @Autowired
    private WebApplicationContext appContext;

    Repositories repositories = null;

    public GenericRepository() {
        repositories = new Repositories(appContext);
    }

    public JpaRepository getRepository(AbstractPersistable entity) {
        return (JpaRepository) repositories.getRepositoryFor(entity.getClass());
    }

    public Object save(AbstractPersistable entity) {
        return getRepository(entity).save(entity);
    }

    public Object findAll(AbstractPersistable entity) {
        return getRepository(entity).findAll();
    }

    public void delete(AbstractPersistable entity) {
        getRepository(entity).delete(entity);
    }
}

推荐