0

我有一个带有一些方法的注释 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>

当我启动我的应用程序时出现下一个错误。

引起:org.springframework.beans.factory.NoSuchBeanDefinitionException:没有定义名为“adminController”的bean

我相信问题是Spring首先加载XML bean,在Annotation bean之后,然后在这一刻“adminController”bean不退出......

我该如何解决?

解决了!!

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

4

2 回答 2

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可能在父上下文中定义,因此您可以轻松访问它。

于 2012-04-27T16:07:26.380 回答
0

不,XML 和注释集成得很好,但是您的 XML 中真的有组件扫描代码吗?

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

请参阅:4.10 类路径扫描和托管组件

于 2012-04-27T16:05:39.633 回答