CustomRepositoryImpl中的自动装配的bean为空

时间:2013-04-22 11:11:15

标签: java spring spring-mvc dependency-injection spring-data

我刚开始使用Spring Data而我正在尝试向我的存储库添加一个自定义方法,这需要另一个bean(最好只创建一次(即单例))

bean在root-context.xml中声明,如此

<bean class="org...CachedQueryTemplateFactory" /> 

当然,使用适当的命名空间。然后我尝试使用@Autowired

将此bean注入CustomRepositoryImpl
@Getter
@Setter
@Component
public class StudyRepositoryImpl implements StudyRepositoryCustom {
    @PersistenceContext private EntityManager d_em;
    @Autowired private QueryTemplateFactory queryTemplateFactory;

    @Override
    public List<Study> findStudies(
            UUID indication,
            List<UUID> variables,
            List<UUID> treatments) {
        QueryTemplate template = this.queryTemplateFactory.buildQueryTemplate("...");
        ...
    }
}

然而,当运行代码时,我得到NullPointerException。在@Controller中进行接线然后将引用传递给存储库时,它可以工作,但我不想在控制器中发生DI。那么为什么QueryRemplateFactory在StudyRepositoryImpl中为null而不是@Controller,我该如何解决这个问题呢?

完整代码可在GitHub https://github.com/joelkuiper/trialverse/tree/feature/injectQueryTemplate

上找到

提前致谢!

1 个答案:

答案 0 :(得分:2)

你可能只需要添加:

<context:component-scan base-package="packagewithservices"/>

OR

<context:annotation-config/>

其中任何一个都注册AutowiredAnnotationBeanPostProcessor负责@Autowired字段中的连线。我链接的javadoc有更多细节。