public class EventPublicationInterceptor extends java.lang.Object implements MethodInterceptor, ApplicationEventPublisherAware, InitializingBean
Interceptor
that publishes an
ApplicationEvent
to all ApplicationListeners
registered with an ApplicationEventPublisher
after each
successful method invocation.
Note that this interceptor is only capable of publishing stateless
events configured via the
"applicationEventClass"
property.
setApplicationEventClass(java.lang.Class<?>)
,
ApplicationEvent
,
ApplicationListener
,
ApplicationEventPublisher
,
ApplicationContext
Modifier and Type | Field and Description |
---|---|
private java.lang.reflect.Constructor<?> |
applicationEventClassConstructor |
private ApplicationEventPublisher |
applicationEventPublisher |
Constructor and Description |
---|
EventPublicationInterceptor() |
Modifier and Type | Method and Description |
---|---|
void |
afterPropertiesSet()
Invoked by the containing
BeanFactory after it has set all bean properties
and satisfied BeanFactoryAware , ApplicationContextAware etc. |
java.lang.Object |
invoke(MethodInvocation invocation)
Implement this method to perform extra treatments before and
after the invocation.
|
void |
setApplicationEventClass(java.lang.Class<?> applicationEventClass)
Set the application event class to publish.
|
void |
setApplicationEventPublisher(ApplicationEventPublisher applicationEventPublisher)
Set the ApplicationEventPublisher that this object runs in.
|
@Nullable private java.lang.reflect.Constructor<?> applicationEventClassConstructor
@Nullable private ApplicationEventPublisher applicationEventPublisher
public void setApplicationEventClass(java.lang.Class<?> applicationEventClass)
The event class must have a constructor with a single
Object
argument for the event source. The interceptor
will pass in the invoked object.
java.lang.IllegalArgumentException
- if the supplied Class
is
null
or if it is not an ApplicationEvent
subclass or
if it does not expose a constructor that takes a single Object
argumentpublic void setApplicationEventPublisher(ApplicationEventPublisher applicationEventPublisher)
ApplicationEventPublisherAware
Invoked after population of normal bean properties but before an init callback like InitializingBean's afterPropertiesSet or a custom init-method. Invoked before ApplicationContextAware's setApplicationContext.
setApplicationEventPublisher
in interface ApplicationEventPublisherAware
applicationEventPublisher
- event publisher to be used by this objectpublic void afterPropertiesSet() throws java.lang.Exception
InitializingBean
BeanFactory
after it has set all bean properties
and satisfied BeanFactoryAware
, ApplicationContextAware
etc.
This method allows the bean instance to perform validation of its overall configuration and final initialization when all bean properties have been set.
afterPropertiesSet
in interface InitializingBean
java.lang.Exception
- in the event of misconfiguration (such as failure to set an
essential property) or if initialization fails for any other reasonpublic java.lang.Object invoke(MethodInvocation invocation) throws java.lang.Throwable
MethodInterceptor
Joinpoint.proceed()
.invoke
in interface MethodInterceptor
invocation
- the method invocation joinpointJoinpoint.proceed()
;
might be intercepted by the interceptorjava.lang.Throwable
- if the interceptors or the target object
throws an exception