Spring,XML bean在应用程序启动时调用注释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
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