Я хотел бы добавить кеш с использованием Spring и аннотации в репозиторий, который использует Spring Data, но я бы предпочел не добавлять аннотации кеша в тот же интерфейс, который расширяет интерфейс JpaRepository для отдельных задач.
Я хотел бы создать оболочку для репозитория Spring JPA, определенную следующим образом:
@NoRepositoryBean
public interface MyRepository extends JpaRepository<MyEntity, Long>{
MyEntity findOneByMyAttribute(String myAttribute);
}
public interface MyRepositorySpring extends MyRepository {}
Spring по умолчанию создает реализацию и добавляет ее в контекст bean-компонентов даже без аннотации @Repository
.
Моя проблема в том, что я хотел бы иметь полный контроль над bean-компонентами в контексте. Я хотел бы создать упаковку, как это:
public class MyCachedRepository extends MyRepository {
private final MyRepository wrappedRepository;
@Cacheable
MyEntity findOneByMyAttribute(String myAttribute){
wrappedRepository.get(myAttribute);
}
}
где wrappedRepository
- реализация, созданная Spring Data, а затем создайте конфигурацию следующим образом:
@Configuration
public class MyConf {
@Bean
public MyRepository myRepository() {
return new MyCachedRepository(myJpaRepository());
}
private MyRepository myJpaRepository() {
//here I would have the code that generates the implementation
}
}
Таким образом, мой код всегда может внедрить bean-компонент myRepository
и позволить конфигурации решить, является ли bean-компонент в контексте обернутым репозиторием или jpa, так как всегда будет только один.
Есть ли способ сделать это?