У меня следующий класс
class MongoCascadeSaveEventListener extends AbstractMongoEventListener<Object> {
@Override
public void onBeforeConvert(final BeforeConvertEvent<Object> event) {
}
}
Определение фасоли
@Bean
public MongoCascadeSaveEventListener mongoCascadeSaveEventListener() {
return new MongoCascadeSaveEventListener();
}
onBeforeConvert никогда не вызывается.
Когда я проверяю класс MongoTemplate, издатель событий устанавливается следующим образом
eventPublisher = new MongoMappingEventPublisher(indexCreator);
Класс из пакета spring mongo. Когда я вижу класс, я не думаю, что реализация правильная, и это объясняет, почему слушатель не вызывается.
public class MongoMappingEventPublisher implements ApplicationEventPublisher {
private final MongoPersistentEntityIndexCreator indexCreator;
/**
* Creates a new {@link MongoMappingEventPublisher} for the given {@link MongoPersistentEntityIndexCreator}.
*
* @param indexCreator must not be {@literal null}.
*/
public MongoMappingEventPublisher(MongoPersistentEntityIndexCreator indexCreator) {
Assert.notNull(indexCreator, "MongoPersistentEntityIndexCreator must not be null!");
this.indexCreator = indexCreator;
}
/*
* (non-Javadoc)
* @see org.springframework.context.ApplicationEventPublisher#publishEvent(org.springframework.context.ApplicationEvent)
*/
@SuppressWarnings("unchecked")
public void publishEvent(ApplicationEvent event) {
if (event instanceof MappingContextEvent) {
indexCreator.onApplicationEvent((MappingContextEvent<MongoPersistentEntity<?>, MongoPersistentProperty>) event);
}
}
/*
* (non-Javadoc)
* @see org.springframework.context.ApplicationEventPublisher#publishEvent(java.lang.Object)
*/
public void publishEvent(Object event) {}
}
это ошибка или мне что-то здесь не хватает? Использование 2.0.5. Выпустите версию Spring data mongo.
Ваша конфигурация выглядит нормально, и должен быть вызван слушатель, MongoTemplate реализует ApplicationContextAware и, следовательно, после создания он устанавливает eventPublisher в applicationContext
mightEmitEvent - это метод MongoTemplate, из которого он публикует события для слушателя, пытается отладить его, и вы можете видеть, что это экземпляр ApplicationContext
MongoMappingEventPublisher - это экземпляр
Единственный случай, когда это должно быть MongoMappingEventPublisher, - это стоять только MongoTemplate вне ApplicationContext, ссылаясь на весенний документ, в этом случае будет запускаться только MappingContextEvent, поэтому BeforeConvertevent не будет запущен
Ты неправ. Значение издателя во время выполнения -
MongoMappingEventPublisher