Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java CustomRepositoryImpl中的自动连线bean为空_Java_Spring_Spring Mvc_Dependency Injection_Spring Data - Fatal编程技术网

Java CustomRepositoryImpl中的自动连线bean为空

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(最好只创建一次(即单例))

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("...");
        ...
    }
}
@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/>