人们!
我的应用程序中有两个maven模块 - 域和持久性。
域具有域对象,服务和到外部端点的“数据提供者”接口,例如持久性。域包含业务逻辑,没有外部依赖 - 他对持久性一无所知。
持久性取决于域名。它实现了域模块的“数据提供者”接口。它可能是关系数据库实现,nosql实现,文件实现等。
例如,我在域中有 PersonRepository 接口,如下所示:
public interface PersonRepository {
List<Person> findAll();
List<Customer> findByLastName(String lastName);
}
我想用Spring Data JPA实现数据提供者接口。我需要写这样的东西:
public interface PersonRepository extends CrudRepository<Person, Long> {
List<Person> findAll();
List<Person> findByLastName(String lastName);
}
但我不想将弹簧依赖注入“核心域”。我想保持我的域非常轻量级和独立。
有没有办法在Persistence模块中使用Spring Data实现PersonRepository?
答案 0 :(得分:0)
Spring Data JPA接口可以扩展多个接口。以下内容应该有效。
在您的域模块中定义:
public interface PersonRepository {
List<Person> findAll();
List<Customer> findByLastName(String lastName);
}
在您的持久性模块中:
@Reposistory
public interface SpringDataJPAPersonRepository extends CrudRepository<Person, Long>, PersonRepository {
// Any Spring Data JPA specific overrides e.g. @Query
}
答案 1 :(得分:0)
您可以只在自己的界面中复制方法,而不是通过Spring Data扩展现成的界面。通常,您只需在其上添加@Repository
注释,Spring Data就可以完成其工作。但这会重新引入依赖性。
所以你可以做的是在你的Spring Configuration中自己调用JpaRepositoryFactory.getRepository
。这样的事情应该有效:
@Bean
public PersonRepository(RepositoryFactorySupport factory) {
return factory.getRepository(PersonRepository.class);
}
这将在您的持久性模块或第三个模块中进行所有模块的连接,因此依赖性应该不是问题。