Spring Data 存储库:揭开实现之谜
在使用 Spring Data JPA 存储库时,您可能想知道它们的内部工作原理。本文将揭示运行时存储库实现的有趣过程。
如何创建存储库类和注入方法?
与常见假设相反,没有代码涉及生成或字节码操作。相反,Spring Data 动态生成一个 JDK 代理实例,充当存储库接口的支持类。此代理拦截所有方法调用并将它们重定向到适当的位置:
此路由由 QueryExecutorMethodInterceptor 处理,它充当代理的方法调度程序。
工厂模式和 DI 集成
存储库代理实例的创建遵循工厂模式,高级代理创建发生在 RepositoryFactorySupport 中。特定于商店的实现提供了必要的组件,以简化与 Spring 等框架的集成。
在 Spring 中,您可以使用以下代码来创建存储库:
EntityManager em = ...; JpaRepositoryFactory factory = new JpaRepositoryFactory(em); UserRepository repository = factory.getRepository(UserRepository.class);
这个基于工厂的方法强调 Spring Data 可以独立于 Spring 容器运行,只要它的库位于类路径上。然而,为了无缝集成,Spring Data 提供了 Java 配置、XML 命名空间和 CDI 扩展支持。
以上是Spring Data在运行时如何生成并实现存储库类?的详细内容。更多信息请关注PHP中文网其他相关文章!