2012-04-27 2 views
0

У меня есть один компонент аннотации с некоторыми методами. Он работает нормально.Spring, XML beans call Annotation beans при запуске приложения

public @Controller("adminController") class AdminController { 

... 
private @Autowired AdminDAO adminDAO; 

public void resetTemporalList() { 

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

    this.adminDAO.resetTemporalRegisters(); 
} 

...

}

Теперь я интегрируя одну кварцевую задачу. Но я загружаю его с компонентами определения XML, которые вызывают аннотацию bean 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» не определен

Я считаю, что проблема в том, что Spring нагрузка XML бобы первой, после аннотационных бобов, затем в этот момент фаза «adminController» не выходит ...

Как это исправить?

SOLVED IT !!

Проблема была в том, что я поставил определения xml bean в applicationContext.xml.

ответ

0

Нет, XML и аннотации интегрированы нормально, но действительно ли у вас есть код сканирования компонентов в вашем XML?

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

См: 4.10 Classpath scanning and managed components

+0

Конечно, приложение еще не найдено. – Dani

0

Немного угадывания: контроллер определен в контексте приложения ребенка, созданный Spring MVC в то время как вы resetTemporalRegisters работы в контексте главного приложения (родитель). Контекст для детей может обращаться к компонентам из родительского контекста, но не наоборот.

Возникает важный вопрос: почему ваша бизнес-логика пытается вызвать метод контроллера? Эти методы следует называть только структурой 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 вероятно определен в родительском контексте, так что вы можете получить доступ к его легко.

+0

adminDAO @ Repository расширяет baseDAO @ Repository, я создал для него новую аннотацию @Parent. С вашим предложением я получаю такую ​​же ошибку. «Вызывается: org.springframework.beans.factory.NoSuchBeanDefinitionException: никакой bean с именем« adminDAO »не определен» – Dani

Смежные вопросы