Java CustomRepositoryImpl中的自动连线bean为空
我只是从开始,并试图向我的存储库添加一个自定义方法,它需要另一个bean(最好只创建一次(即单例)) bean在root-context.xml中声明,如下所示Java CustomRepositoryImpl中的自动连线bean为空,java,spring,spring-mvc,dependency-injection,spring-data,Java,Spring,Spring Mvc,Dependency Injection,Spring Data,我只是从开始,并试图向我的存储库添加一个自定义方法,它需要另一个bean(最好只创建一次(即单例)) bean在root-context.xml中声明,如下所示 <bean class="org...CachedQueryTemplateFactory" /> 当然,使用正确的名称空间。然后我尝试使用@Autowired将这个bean注入CustomRepositoryImpl @Getter @Setter @Component public class StudyRepo
<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("...");
...
}
}
@Getter
@塞特
@组成部分
公共类StudyRepositoryImpl实现StudyRepositoryCustom{
@PersistenceContext私有实体管理器d_em;
@自动连线专用QueryTemplateFactory QueryTemplateFactory;
@凌驾
公共列表查找研究(
UUID指示,
列出变量,
列出治疗方法){
QueryTemplate=this.queryTemplateFactory.buildQueryTemplate(“…”);
...
}
}
然而,当运行代码时,我得到了NullPointerException。在@Controller中进行连接,然后将引用传递到存储库时,它可以工作,但我不希望DI发生在控制器中。那么,为什么StudyRepositoryImpl中的QueryTemplateFactory为空,而@Controller中的QueryTemplateFactory为空,我该如何解决这个问题呢
完整代码可在GitHub上获得
提前谢谢 您可能只需要添加:
<context:component-scan base-package="packagewithservices"/>
或
这两个寄存器中的任何一个都负责
@Autowired
字段中的布线。我链接到的javadoc有更多的细节。我唯一经历过这种情况的时候是我的调用类bean不是由Spring管理的。确保您的电脑中有
config@NeilA事实上,我甚至尝试使用组件注释而不是XMLBean配置(我使用的是注释驱动的SpringMVC),但是没有任何工具可以让@Qualifier(“CachedQueryTemplateFactory”)
与您一起使用@Autowired
声明。Spring自动搜索以“Impl”结尾的bean。另外,我认为您在CachedQueryTemplateFactory上的实现必须是一个@服务
尝试过的。。。还是给我空的。我的猜测是Spring数据JPA以某种方式弄乱了DI,所以我想我能做的最好的事情是调用对象中的DI,在本例中是控制器。不确定OR是否是独占的。无论如何,两者都存在,如果不这样做,将在引导期间导致“找不到依赖项类型为[…]的匹配bean…”,而不是在运行时导致NullPointerException。即使没有,它也不能解释为什么它对控制器有效(相同的代码,不同的地方)。你确定它存在吗,我在你的root-context.xml文件中没有看到它们中的任何一个-它是在servlet上下文中单独不起作用的@JoelKuiper,问题是这里有两个不同的应用程序上下文在起作用-根上下文(保存服务、数据源等)和web上下文(通过DispatcherServlet加载)持有控制器。要在这些上下文中实现自动连接,您必须在这两种上下文中都使用上下文:…
。啊,是的。我很确定我也尝试过这样做,所以Github上的代码可能有点过时。我有点惊讶,它不会抛出“类型的不合格bean…”不过也有例外,我试试看!
<context:annotation-config/>