小编rgr*_*ski的帖子

在Spring Data JPA存储库中使用@Primary

如果有人需要在Spring Data存储库上使用@Primary:看起来Spring Data JPA忽略@Primary了存储库上的注释.

作为一种解决方法,我创建了BeanFactoryPostProcessor哪个检查给定的存储库是否有@Primary注释并将该bean设置为主要.

这是代码:

@Component
public class SpringDataPrimaryPostProcessor implements BeanFactoryPostProcessor {
    public static final String REPOSITORY_INTERFACE_PROPERTY = "repositoryInterface";


    @Override
    public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
        makeRepositoriesPrimary(getRepositoryBeans(beanFactory));
    }

    protected List<BeanDefinition> getRepositoryBeans(ConfigurableListableBeanFactory beanFactory) {
        List<BeanDefinition> springDataRepositoryDefinitions = Lists.newArrayList();
        for (String beanName : beanFactory.getBeanDefinitionNames()) {
            BeanDefinition beanDefinition = beanFactory.getBeanDefinition(beanName);

            String beanClassName = beanDefinition.getBeanClassName();
            try {
                Class<?> beanClass = Class.forName(beanClassName);
                if (isSpringDataJpaRepository(beanClass)) {
                    springDataRepositoryDefinitions.add(beanDefinition);
                }
            } catch (ClassNotFoundException e) {
                throw new ApplicationContextException(String.format("Error when trying …
Run Code Online (Sandbox Code Playgroud)

java spring hibernate jpa spring-data-jpa

5
推荐指数
1
解决办法
761
查看次数

标签 统计

hibernate ×1

java ×1

jpa ×1

spring ×1

spring-data-jpa ×1