Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.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
Spring,XML bean在应用程序启动时调用注释bean_Spring_Annotations - Fatal编程技术网

Spring,XML bean在应用程序启动时调用注释bean

Spring,XML bean在应用程序启动时调用注释bean,spring,annotations,Spring,Annotations,我有一个带有一些方法的注释bean。它很好用 public @Controller("adminController") class AdminController { ... private @Autowired AdminDAO adminDAO; public void resetTemporalList() { System.out.println("HE SIDO EJECUTADO."); this.adminDAO.resetTemporalRegister

我有一个带有一些方法的注释bean。它很好用

public @Controller("adminController") class AdminController {

...
private @Autowired AdminDAO adminDAO;

public void resetTemporalList() {

    System.out.println("HE SIDO EJECUTADO.");

    this.adminDAO.resetTemporalRegisters();
}

}

现在,我正在集成一个石英任务。但我正在用XML定义bean加载它,这些定义bean调用previus注释bean

<bean id="resetTemporalRegisters" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
    <property name="targetObject" ref="adminController" />
    <property name="targetMethod" value="resetTemporalList" />
    <property name="concurrent" value="false" />
</bean>
启动我的应用程序时出现下一个错误

原因:org.springframework.beans.factory.NoSuchBean定义异常:未定义名为“adminController”的bean

我认为问题在于Spring首先加载XML bean,在注释bean之后,然后在这一刻adminController bean不存在

我怎样才能修好它

解决了


问题在于我将XMLBean定义放在applicationContext.xml中。

不,xml和注释可以很好地集成,但您的xml中确实有组件扫描代码吗

<context:component-scan base-package="com.yourcompany.yourapp"/>

请参阅:

一点猜测:当您在主应用程序上下文父级中重置临时寄存器作业时,您的控制器在Spring MVC创建的子应用程序上下文中定义。子上下文可以从父上下文访问bean,但不能从父上下文访问bean

这提出了一个重要的问题:为什么您的业务逻辑试图调用控制器的方法?这些方法只能在MVC框架中调用。你就不能打个电话吗

this.adminDAO.resetTemporalRegisters();
直接从你的工作

<bean id="resetTemporalRegisters" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
  <property name="targetObject" ref="adminDAO" />
  <property name="targetMethod" value="resetTemporalRegisters" />
  <property name="concurrent" value="false" />
</bean>

adminDAO可能是在父上下文中定义的,因此您可以轻松地访问它

adminDAO@Repository延伸baseDAO@Repository,我为此创建了一个新注释@Parent。根据你的建议,我也会犯同样的错误。原因:org.springframework.beans.factory.NoSuchBean定义异常:未定义名为“adminDAO”的bean