Как создать реализацию JPA с помощью Spring, который не добавлен в контекст Spring? - PullRequest
0 голосов
/ 11 января 2019

Я хотел бы добавить кеш с использованием 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, так как всегда будет только один.

Есть ли способ сделать это?

...