我正在尝试手动定义自定义spring数据存储库,我有以下3个类:
public interface PersonRepository extends JpaRepository<Person, Long>...
public interface PersonRepositoryCustom
public class PersonRepositoryImpl implements PersonRepositoryCustom {
@Resource
private PersonRepository personRepository;
......
}
要在Configuration类中配置它,我有以下内容:
@Bean
public PersonRepositoryImpl personRepositoryImpl() {
return new PersonRepositoryImpl();
}
@Bean
public PersonRepository personRepository() {
return getFactoryBean(PersonRepository.class, personRepositoryImpl());
}
private <T> T getFactoryBean(Class<T> repository, Object customImplementation) {
BaseRepositoryFactoryBean factory = new BaseRepositoryFactoryBean();
factory.setEntityManager(entityManager);
factory.setBeanFactory(beanFactory);
factory.setRepositoryInterface(repository);
if (customImplementation != null) {
factory.setCustomImplementation(customImplementation);
}
factory.afterPropertiesSet();
return (T) factory.getObject();
}
我遇到的问题是我得到了 “创建名为'personRepository'的bean时出错:正在创建请求的bean:是否存在无法解析的循环引用”
这似乎是因为PersonRepositoryImpl包含对personRepository接口的资源引用。
如果我在配置类上使用EnableJpaRepositories,那么一切似乎都能正常工作。 但是我不想使用那个注释,它会根据包进行扫描,而且我想要更细粒度的可配置性。
那么有谁知道如何手动设置一个弹簧自定义存储库,它允许注入而没有循环引用问题?
任何?
答案 0 :(得分:1)
您可以创建一个CustomRepository
扩展Repository<T,ID extends Serializable>
的界面。如果您想完全控制您的存储库,那么您可以自己实现CustomRepositoryImpl
。您可以参考SimpleJpaRepository作为实施示例。