自定义Spring Data Repository中的@Autowired依赖项为null

时间:2018-01-16 01:38:01

标签: java spring spring-data spring-data-jpa

我创建了一个像这样的自定义Spring Data存储库

BaseRepositoryCustomImpl<T extends BaseEntity>
    extends SimpleJpaRepository<T, Long>
    implements BaseEntityRepository<T, Long> {
     @Autowired
     private MyCustomClass myCustomClass;
}

请注意MyCustomClass在我的配置类中定义为@Bean。然后使用我的自定义存储库,将其添加到我的配置类,如此

@Configuration
@Profile("jpa")
@EnableJpaRepositories(basePackages = {
    "com.package.repository"
}, repositoryImplementationPostfix = "CustomImpl",
   repositoryBaseClass = BaseRepositoryCustomImpl.class
)

除了myCustomClass之外,一切都运转良好,null始终为MyCustomClass。我应该如何自动装配str?如果在控制器等其他类中使用,则可以正确自动布线。

1 个答案:

答案 0 :(得分:0)

更常见的问题是如何为非Spring托管类型自动装配实例。

您可以创建BeanUtil类

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Service;

@Service
public class BeanUtil implements ApplicationContextAware {
    private static ApplicationContext context;

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        context = applicationContext;
    }

    public static <T> T getBean(Class<T> beanClass) {
        return context.getBean(beanClass);
    }
}

,然后通过以下方式使用它来获取bean:

    UserRepository userRepository = BeanUtil.getBean(UserRepository.class);

this启发