【问题标题】:Correct inheritance in spring data repositoriesspring 数据存储库中的正确继承
【发布时间】:2018-12-14 22:30:53
【问题描述】:

我必须实现带有 @Repository 注释的自定义存储库类,它应该继承另一个带有 @Repository 注释的类。

该用例的正确实现是什么?可以直接继承该类并将@Repository添加到main,还是有另一个最佳实践?其实我定义的时候有问题

 @EnableJpaRepositories(basePackages = { "com.example.foo.repositories", "com.example.bar.repositories" }

在根目录下的@Configuration 类中,它不会扫描我的存储库,我也无法自动装配它。

这是我的存储库类的示例:

父存储库(第三方类):

@Repository
public abstract class ParentRepository {
  // ...
}

包com.example.foo.repositories中的接口和实现类:

public interface IFooRepository {
   Foo getFoo();
}

@Repository
public class FooRepository extends ParentRepository implements IFooRepository {
   Foo getFoo() {
      // ...
   }
}

您知道如何修复它并实现自动装配 IFooRepository 吗? 谢谢你的建议。

编辑:

我在 @EnableJpaRepositories 旁边找到了绿豆,当我点击 bean 时,它会将我重定向到 bar 存储库,并且不显示 FooRepository Bean。我不明白,因为两个存储库的实现方式相同。

【问题讨论】:

    标签: java spring spring-boot spring-data-jpa


    【解决方案1】:

    根据 jpa 存储库的文档

    在前面的示例中,指示 Spring 扫描 com.acme.repositories 及其所有子包以查找扩展 Repository 的接口或其子接口之一。对于找到的每个接口,基础设施都会注册特定于持久性技术的 FactoryBean 以创建适当的代理来处理查询方法的调用。 see

    所以基本上@EnableJpaRepositories - 与链接中的 xml 配置相同 - 它指示查找扩展 Repository 的类。在您的示例中,您有 @Repository 注释 - 指示 Spring 转换异常。您应该将"com.example.foo.repositories", "com.example.bar.repositories" 包含在组件扫描中。试试@ComponentScan注解see

    【讨论】:

    • 谢谢它的帮助,但我不确定我是否理解。我检查了 @EnableJpaRepositories 的 java 文档,并写了“启用 JPA 存储库的注释。默认情况下将扫描带注释的配置类的包以查找 Spring Data 存储库。”它是否也应该扫描存储库?
    • @Denis Stephanov - 这意味着默认情况下 Spring 将扫描你的配置类 @EnableJpaRepositories 所在的包
    • 那么当我将它添加到 Spring 模块中时,Spring 不会按包扫描存储库到该注释中,但 ComponentScan 会扫描?
    • @Denis Stephanov ComponentScan 正在扫描具有不同构造型的组件,例如 @Component、@Service、@Controller 或 @Repository - 如果您需要组件 @Repository。 @EnableJpaRepositories 正在扫描从 spring Repository 继承的类默认情况下它会扫描您设置的配置类的包 @EnableJpaRepositories
    【解决方案2】:

    默认情况下,将@Primary 注解添加到您的自定义存储库时,应尽可能将其自动装配到另一个类中,即使有其他有效的用于自动装配的 bean。

    【讨论】:

    • 我试过了,但不起作用:/请检查我更新的问题。
    猜你喜欢
    • 2017-09-07
    • 1970-01-01
    • 1970-01-01
    • 2012-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多