我有一个带有一些方法的Annotation bean。它工作正常。
public @Controller("adminController") class AdminController {
...
private @Autowired AdminDAO adminDAO;
public void resetTemporalList() {
System.out.println("HE SIDO EJECUTADO.");
this.adminDAO.resetTemporalRegisters();
}
...
}
现在,我正在整合一个石英任务。但是我使用调用previus注释bean的XML定义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>
Whan我开始我的应用程序出现下一个错误。
引起:org.springframework.beans.factory.NoSuchBeanDefinitionException:没有定义名为'adminController'的bean
我认为问题是Spring首先加载XML bean,在Annotation bean之后,然后在这一刻“adminController”bean不能退出...
我该如何解决?
解决了它!!
问题在于我将xml bean定义放在applicationContext.xml中。
答案 0 :(得分:0)
不,XML和注释集成得很好,但您实际上是否在XML中有组件扫描代码?
<context:component-scan base-package="com.yourcompany.yourapp"/>
答案 1 :(得分:0)
一点点猜测:你的控制器是在Spring MVC创建的子应用程序上下文中定义的,而你resetTemporalRegisters
在主应用程序上下文(父)中作业。子上下文可以从父上下文访问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
可能在父上下文中定义,因此您可以轻松访问它。