我必须实现带有@Repository
注释的自定义存储库类,该类也应该继承另一个带有@Repository
注释的类。
该用例的正确实现是什么?是否可以直接继承该类并将@Repository
添加到main中,或者还有另一种最佳实践?定义后,实际上我有问题
@EnableJpaRepositories(basePackages = { "com.example.foo.repositories", "com.example.bar.repositories" }
根@Configuration
类中的不会扫描我的存储库,也无法自动装配它。
这是我的存储库类的示例:
父存储库(第三方类):
@Repository
public abstract class ParentRepository {
// ...
}
软件包com.example.foo.repositories
中的interface和impl类:
public interface IFooRepository {
Foo getFoo();
}
@Repository
public class FooRepository extends ParentRepository implements IFooRepository {
Foo getFoo() {
// ...
}
}
您是否知道如何解决它并使自动连接IFooRepository成为可能? 谢谢你的建议。
编辑:
我在@EnableJpaRepositories旁边发现了一个绿色bean,当我单击该bean时,它将我重定向到bar存储库,并且没有显示FooRepository Bean。我不明白,因为两个存储库都实现相同。
答案 0 :(得分:1)
根据jpa信息库的文档
在前面的示例中,指示Spring扫描com.acme.repositories及其所有子包,以获取扩展Repository的接口或其子接口之一。对于找到的每个接口,基础结构都会注册持久性技术特定的FactoryBean,以创建处理查询方法调用的适当代理。 see
因此,基本上@EnableJpaRepositories
-与链接中的xml配置相同-它指示查找扩展Repository
的类。在您的示例中,您有@Repository
注释-指示Spring转换异常。您应该将"com.example.foo.repositories", "com.example.bar.repositories"
加入组件扫描。尝试使用@ComponentScan
注解see
答案 1 :(得分:0)
将@Primary
注释添加到自定义存储库中,默认情况下应尽可能将其自动装配到另一个类中,即使该自动装配还有其他有效的bean。