Я проблема с прослушивателями событий в Spring В моем веб-приложении всякая немедленная помощь будет оценена по достоинству.Слушатели Слушатели весны называются дважды
Слушатели слушаний регистрируются и вызывается дважды, если у меня есть циклическая зависимость.
У меня есть класс обслуживания, это имеет @transaction аннотации других методы
@Service(PBSTaskService.BEAN_NAME)
public class PBSTaskServiceImpl extends StandardServiceImpl<ITask> implements PBSTaskService,ApplicationListener<SurveyDefinitionPublishedEvent>
{
@Autowired
private AutoSelectTaskSliceRouteSyncService autoSelectTaskSliceRouteSyncService; // CYCLIC Dependency
@Override
public void onApplicationEvent(SurveyDefinitionPublishedEvent event)
{
System.out.println("PBSTSImpl"); // THIS IS CALLED TWICE
}
... Other method with @Transaction Annotation
}
@Service(AutoSelectTaskSliceRouteSyncService.BEAN_NAME)
public class AutoSelectTaskSliceRouteSyncServiceImpl implements AutoSelectTaskSliceRouteSyncService
{
@Autowired private PBSTaskService pbsTaskService; // CYCLIC dependency
}
Теперь Если удалить AutoSelectTaskSliceRouteSyncService зависимости от первого класса, OnApplicationEvent вызывается один раз, еще два раза.
Я отлаживал и выяснял, что SimpleApplicationEventMulticaster.getApplicationListeners (myEvent): имеет два прокси-объекта, один из которых завершен Cglib и другой по умолчанию. Но он имеет два только в том случае, если он имеет циклическую зависимость. Если я удалю циклическую зависимость, у нее будет только один прокси-объект, и он будет включен в CGLIB. my Tx аннотация: Я пробовал это с прокси-target-class = "true или false", но не повезло.
Вы можете взглянуть на
Столкнувшись с той же проблемой в Grails 2.4.5, когда класс обслуживания класса как ApplicationListener. – AndreyT