gpt4 book ai didi

java - 如何从自定义实现中引用 'normal' spring 数据仓库?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:08:25 25 4
gpt4 key购买 nike

我想用自定义实现扩展一个 JpaRepository,所以我添加了一个 MyRepositoryCustom 接口(interface)和一个扩展该接口(interface)的 MyRepositoryImpl 类。

有没有办法在我的自定义类中从 JpaRepository 调用方法?

注意:这也作为对 https://stackoverflow.com/a/11881203/40064 的评论被问及, 但我认为这很常见,值得单独提出一个问题。

最佳答案

tl;dr

要将核心存储库接口(interface)注入(inject)自定义实现,请注入(inject) Provider<RepositoryInterface>进入自定义实现。

详情

实现该功能的核心挑战是正确设置依赖注入(inject),因为您将要在要扩展的对象和扩展之间创建循环依赖。然而,这可以通过以下方式解决:

interface MyRepository extends Repository<DomainType, Long>, MyRepositoryCustom {
// Query methods go here
}

interface MyRepositoryCustom {
// Custom implementation method declarations go here
}

class MyRepositoryImpl implements MyRepositoryCustom {

private final Provider<MyRepository> repository;

@Autowired
public MyRepositoryImpl(Provider<MyRepository> repository) {
this.repository = repository;
}

// Implement custom methods here
}

这里最重要的部分是使用 Provider<MyRepository>这将导致 Spring 为该依赖项创建延迟初始化的代理 ,即使它正在为 MyRepository 创建实例首先。在自定义方法的实现中,您可以使用 ….get() 访问实际的 bean。 -方法。

Provider是来自 @Inject 的接口(interface)JSR,因此是一个标准化的接口(interface),需要对该 API JAR 的额外依赖。如果你只想坚持使用 Spring,你可以使用 ObjectFactory作为替代界面,但获得完全相同的行为。

关于java - 如何从自定义实现中引用 'normal' spring 数据仓库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28361275/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com