给定某个类Bar
中的所有spring数据库的列表:
@Autowired
private List<Repository> repositories;
如何在上面的列表中找到现有域类Foo
的存储库?
假设存在以下情况:
@Entity
public class Foo {
...
}
和
public interface FooRepository extends JpaRepository<Foo, String> {}
给定某个类Bar
中的所有spring数据库的列表:
@Autowired
private List<Repository> repositories;
如何在上面的列表中找到现有域类Foo
的存储库?
假设存在以下情况:
@Entity
public class Foo {
...
}
和
public interface FooRepository extends JpaRepository<Foo, String> {}
5条答案
按热度按时间eqzww0vc1#
Spring Data Commons包含一个类
Repositories
,它接受一个ListableBeanFactory
来查找其中定义的所有存储库bean,并公开一个API来通过域类(通过….getRepository(Class<?> type)
)获取这些示例。这个类应该小心使用。因为仓库示例有一些严重的代理生成,所以你必须确保在
ApplicationContext
创建期间尽可能晚地创建Repositories
示例。首选的方法是实现ApplicationListener
,并通过监听ContextRefreshedEvent
来创建示例。如果您正在编写一个Web应用程序,使用
Repositories
最安全的方法是引导由ContextLoaderListener
创建的ApplicationContext
中的存储库,并放置Repositories
(有关详细信息,请参阅Spring MVC的参考文档)。polhcujo2#
qeeaahzv3#
解决 方案 的 关键 是 Spring 的
org.springframework.data.repository.core.support.DefaultRepositoryMetadata
, 它 提供 了getDomainType()
方法 。DefaultRepositoryMetadata
需要 存储 库 接口 作为 构造 器 参数 。 因此 , 可以 遍历 所有 现有 存储 库 , 检索 存储 库 接口 ( 这 仍然 是 一 个 棘手 的 部分 , 因为 存储 库 示例 有 多 个 接口 ) , 并 找到getDomainType()
等于Foo.class
的 接口 。rryofs0p4#
您可以使用Spring的GenericTypeResolver从存储库中获取Entity类。
dsf9zpds5#
这对我很有效: