我刚开始使用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
上找到提前致谢!
答案 0 :(得分:2)
你可能只需要添加:
<context:component-scan base-package="packagewithservices"/>
OR
<context:annotation-config/>
其中任何一个都注册AutowiredAnnotationBeanPostProcessor负责@Autowired
字段中的连线。我链接的javadoc有更多细节。