Package ca.uhn.fhir.interceptor.executor
Class BaseInterceptorService<POINTCUT extends IPointcut>
java.lang.Object
ca.uhn.fhir.interceptor.executor.BaseInterceptorService<POINTCUT>
- All Implemented Interfaces:
IBaseInterceptorBroadcaster<POINTCUT>,IBaseInterceptorService<POINTCUT>
- Direct Known Subclasses:
InterceptorService
public abstract class BaseInterceptorService<POINTCUT extends IPointcut>
extends Object
implements IBaseInterceptorService<POINTCUT>, IBaseInterceptorBroadcaster<POINTCUT>
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionprotected static classprotected static class -
Constructor Summary
ConstructorsConstructorDescriptionConstructor which uses a default name of "default"BaseInterceptorService(String theName)Constructor -
Method Summary
Modifier and TypeMethodDescriptionbooleancallHooks(POINTCUT thePointcut, HookParams theParams)Invoke registered interceptor hook methods for the given Pointcut.callHooksAndReturnObject(POINTCUT thePointcut, HookParams theParams)Invoke registered interceptor hook methods for the given Pointcut.protected static <T extends Annotation>
Optional<T>findAnnotation(AnnotatedElement theObject, Class<T> theHookClass)Returns all currently registered interceptors (excluding any thread local interceptors).booleanDoes this broadcaster have any hooks for the given pointcut?booleanAre threadlocal interceptors enabled on this registry (defaults to true)protected voidregisterAnonymousInterceptor(POINTCUT thePointcut, Object theInterceptor, BaseInterceptorService.BaseInvoker theInvoker)booleanregisterInterceptor(Object theInterceptor)Register an interceptor.voidregisterInterceptors(Collection<?> theInterceptors)booleanregisterThreadLocalInterceptor(Object theInterceptor)Register an interceptor that will be used in aThreadLocalcontext.protected abstract Optional<BaseInterceptorService.HookDescriptor>scanForHook(Method nextMethod)voidvoidsetThreadlocalInvokersEnabled(boolean theThreadlocalInvokersEnabled)Are threadlocal interceptors enabled on this registry (defaults to true)voidsetWarnOnInterceptorWithNoHooks(boolean theWarnOnInterceptorWithNoHooks)Should a warning be issued if an interceptor is registered and it has no hooksvoidUnregisters all registered interceptors.booleanunregisterInterceptor(Object theInterceptor)Unregister an interceptor.voidunregisterInterceptors(Collection<?> theInterceptors)voidunregisterInterceptorsIf(Predicate<Object> theShouldUnregisterFunction)Unregisters all interceptors that are indicated by the given callback function returningtruevoidunregisterThreadLocalInterceptor(Object theInterceptor)Unregisters a ThreadLocal interceptor
-
Constructor Details
-
BaseInterceptorService
public BaseInterceptorService()Constructor which uses a default name of "default" -
BaseInterceptorService
Constructor- Parameters:
theName- The name for this registry (useful for troubleshooting)
-
-
Method Details
-
setWarnOnInterceptorWithNoHooks
Should a warning be issued if an interceptor is registered and it has no hooks -
isThreadlocalInvokersEnabled
Are threadlocal interceptors enabled on this registry (defaults to true) -
setThreadlocalInvokersEnabled
Are threadlocal interceptors enabled on this registry (defaults to true) -
setName
-
registerAnonymousInterceptor
protected void registerAnonymousInterceptor(POINTCUT thePointcut, Object theInterceptor, BaseInterceptorService.BaseInvoker theInvoker) -
getAllRegisteredInterceptors
Description copied from interface:IBaseInterceptorServiceReturns all currently registered interceptors (excluding any thread local interceptors).- Specified by:
getAllRegisteredInterceptorsin interfaceIBaseInterceptorService<POINTCUT extends IPointcut>
-
unregisterAllInterceptors
Description copied from interface:IBaseInterceptorServiceUnregisters all registered interceptors. Note that this method does not unregister anythread local interceptors.- Specified by:
unregisterAllInterceptorsin interfaceIBaseInterceptorService<POINTCUT extends IPointcut>
-
unregisterInterceptors
- Specified by:
unregisterInterceptorsin interfaceIBaseInterceptorService<POINTCUT extends IPointcut>
-
registerInterceptors
- Specified by:
registerInterceptorsin interfaceIBaseInterceptorService<POINTCUT extends IPointcut>
-
unregisterInterceptorsIf
Description copied from interface:IBaseInterceptorServiceUnregisters all interceptors that are indicated by the given callback function returningtrue- Specified by:
unregisterInterceptorsIfin interfaceIBaseInterceptorService<POINTCUT extends IPointcut>
-
registerThreadLocalInterceptor
Description copied from interface:IBaseInterceptorServiceRegister an interceptor that will be used in aThreadLocalcontext. This means that events will only be broadcast to the given interceptor if they were fired from the current thread.Note that it is almost always desirable to call this method with a try-finally statement that removes the interceptor afterwards, since this can lead to memory leakage, poor performance due to ever-increasing numbers of interceptors, etc.
Note that most methods such as
IBaseInterceptorService.getAllRegisteredInterceptors()andIBaseInterceptorService.unregisterAllInterceptors()do not affect thread local interceptors as they are kept in a separate list.- Specified by:
registerThreadLocalInterceptorin interfaceIBaseInterceptorService<POINTCUT extends IPointcut>- Parameters:
theInterceptor- The interceptor- Returns:
- Returns
trueif at least one valid hook method was found on this interceptor
-
unregisterThreadLocalInterceptor
Description copied from interface:IBaseInterceptorServiceUnregisters a ThreadLocal interceptor- Specified by:
unregisterThreadLocalInterceptorin interfaceIBaseInterceptorService<POINTCUT extends IPointcut>- Parameters:
theInterceptor- The interceptor- See Also:
IBaseInterceptorService.registerThreadLocalInterceptor(Object)
-
registerInterceptor
Description copied from interface:IBaseInterceptorServiceRegister an interceptor. This method has no effect if the given interceptor is already registered.- Specified by:
registerInterceptorin interfaceIBaseInterceptorService<POINTCUT extends IPointcut>- Parameters:
theInterceptor- The interceptor to register- Returns:
- Returns
trueif at least one valid hook method was found on this interceptor
-
unregisterInterceptor
Description copied from interface:IBaseInterceptorServiceUnregister an interceptor. This method has no effect if the given interceptor is not already registered.- Specified by:
unregisterInterceptorin interfaceIBaseInterceptorService<POINTCUT extends IPointcut>- Parameters:
theInterceptor- The interceptor to unregister- Returns:
- Returns
trueif the interceptor was found and removed
-
callHooksAndReturnObject
Description copied from interface:IBaseInterceptorBroadcasterInvoke registered interceptor hook methods for the given Pointcut. This method should only be called for pointcuts that return a type other thanvoidorboolean- Specified by:
callHooksAndReturnObjectin interfaceIBaseInterceptorBroadcaster<POINTCUT extends IPointcut>- Returns:
- Returns the object returned by the first hook method that did not return
null
-
hasHooks
Description copied from interface:IBaseInterceptorBroadcasterDoes this broadcaster have any hooks for the given pointcut?- Specified by:
hasHooksin interfaceIBaseInterceptorBroadcaster<POINTCUT extends IPointcut>- Parameters:
thePointcut- The poointcut- Returns:
- Does this broadcaster have any hooks for the given pointcut?
-
callHooks
Description copied from interface:IBaseInterceptorBroadcasterInvoke registered interceptor hook methods for the given Pointcut.- Specified by:
callHooksin interfaceIBaseInterceptorBroadcaster<POINTCUT extends IPointcut>- Returns:
- Returns
falseif any of the invoked hook methods returnedfalse, and returnstrueotherwise.
-
scanForHook
-
findAnnotation
protected static <T extends Annotation> Optional<T> findAnnotation(AnnotatedElement theObject, Class<T> theHookClass)
-