bean- Spring Spring Beans ( ) bean-, bean- Advised ApplicationListener ApplicationEventMulticaster. , , ApplicationEventMulticaster ( ).
Spring SimpleApplicationEventMulticaster, non- Advised Advised ApplicationListener ( , Advised onApplicationEvent , - @Transactional AOP-, , )
@Component
public class AdviceAwareApplicationEventMulticaster extends SimpleApplicationEventMulticaster {
@Override
protected Collection<ApplicationListener<?>> getApplicationListeners(ApplicationEvent event, ResolvableType eventType) {
Map<ApplicationListener<?>, ApplicationListener<?>> listenersByNakedInstances = new LinkedHashMap<>();
Collection<ApplicationListener<?>> applicationListeners = super.getApplicationListeners(event, eventType);
for (ApplicationListener<?> listener : applicationListeners) {
boolean advised = false;
ApplicationListener<?> nakedListener = null;
if (listener instanceof Advised) {
try {
nakedListener = (ApplicationListener<?>) ((Advised)listener).getTargetSource().getTarget();
} catch (Exception e) {
}
advised = true;
} else
nakedListener = listener;
if (advised || !listenersByNakedInstances.containsKey(nakedListener))
listenersByNakedInstances.put(nakedListener, listener);
}
return listenersByNakedInstances.values();
}
}
Spring , , bean- Spring, Spring Application Context .
, , Spring, , .