public class ScheduledAnnotationBeanPostProcessor extends Object implements ScheduledTaskHolder, org.springframework.beans.factory.support.MergedBeanDefinitionPostProcessor, org.springframework.beans.factory.config.DestructionAwareBeanPostProcessor, org.springframework.core.Ordered, EmbeddedValueResolverAware, org.springframework.beans.factory.BeanNameAware, org.springframework.beans.factory.BeanFactoryAware, ApplicationContextAware, org.springframework.beans.factory.SmartInitializingSingleton, ApplicationListener<ContextRefreshedEvent>, org.springframework.beans.factory.DisposableBean
Scheduled
to be invoked by a TaskScheduler
according
to the "fixedRate", "fixedDelay", or "cron" expression provided via the annotation.
This post-processor is automatically registered by Spring's
<task:annotation-driven>
XML element, and also by the
@EnableScheduling
annotation.
Autodetects any SchedulingConfigurer
instances in the container,
allowing for customization of the scheduler to be used or for fine-grained
control over task registration (e.g. registration of Trigger
tasks.
See the @EnableScheduling
javadocs for complete usage details.
Scheduled
,
EnableScheduling
,
SchedulingConfigurer
,
TaskScheduler
,
ScheduledTaskRegistrar
,
AsyncAnnotationBeanPostProcessor
Modifier and Type | Field and Description |
---|---|
static String |
DEFAULT_TASK_SCHEDULER_BEAN_NAME
The default name of the
TaskScheduler bean to pick up: "taskScheduler". |
protected Log |
logger |
Constructor and Description |
---|
ScheduledAnnotationBeanPostProcessor()
Create a default
ScheduledAnnotationBeanPostProcessor . |
ScheduledAnnotationBeanPostProcessor(ScheduledTaskRegistrar registrar)
Create a
ScheduledAnnotationBeanPostProcessor delegating to the
specified ScheduledTaskRegistrar . |
Modifier and Type | Method and Description |
---|---|
void |
afterSingletonsInstantiated() |
protected Runnable |
createRunnable(Object target,
Method method)
Create a
Runnable for the given bean instance,
calling the specified scheduled method. |
void |
destroy() |
int |
getOrder() |
Set<ScheduledTask> |
getScheduledTasks()
Return all currently scheduled tasks, from
Scheduled methods
as well as from programmatic SchedulingConfigurer interaction. |
void |
onApplicationEvent(ContextRefreshedEvent event)
Handle an application event.
|
Object |
postProcessAfterInitialization(Object bean,
String beanName) |
void |
postProcessBeforeDestruction(Object bean,
String beanName) |
Object |
postProcessBeforeInitialization(Object bean,
String beanName) |
void |
postProcessMergedBeanDefinition(org.springframework.beans.factory.support.RootBeanDefinition beanDefinition,
Class<?> beanType,
String beanName) |
protected void |
processScheduled(Scheduled scheduled,
Method method,
Object bean)
Process the given
@Scheduled method declaration on the given bean. |
boolean |
requiresDestruction(Object bean) |
void |
setApplicationContext(ApplicationContext applicationContext)
Setting an
ApplicationContext is optional: If set, registered
tasks will be activated in the ContextRefreshedEvent phase;
if not set, it will happen at afterSingletonsInstantiated() time. |
void |
setBeanFactory(org.springframework.beans.factory.BeanFactory beanFactory)
Making a
BeanFactory available is optional; if not set,
SchedulingConfigurer beans won't get autodetected and
a scheduler has to be explicitly configured. |
void |
setBeanName(String beanName) |
void |
setEmbeddedValueResolver(org.springframework.util.StringValueResolver resolver)
Set the StringValueResolver to use for resolving embedded definition values.
|
void |
setScheduler(Object scheduler)
Set the
TaskScheduler that will invoke
the scheduled methods, or a ScheduledExecutorService
to be wrapped as a TaskScheduler. |
public static final String DEFAULT_TASK_SCHEDULER_BEAN_NAME
TaskScheduler
bean to pick up: "taskScheduler".
Note that the initial lookup happens by type; this is just the fallback in case of multiple scheduler beans found in the context.
protected final Log logger
public ScheduledAnnotationBeanPostProcessor()
ScheduledAnnotationBeanPostProcessor
.public ScheduledAnnotationBeanPostProcessor(ScheduledTaskRegistrar registrar)
ScheduledAnnotationBeanPostProcessor
delegating to the
specified ScheduledTaskRegistrar
.registrar
- the ScheduledTaskRegistrar to register @Scheduled tasks onpublic int getOrder()
getOrder
in interface org.springframework.core.Ordered
public void setScheduler(Object scheduler)
TaskScheduler
that will invoke
the scheduled methods, or a ScheduledExecutorService
to be wrapped as a TaskScheduler.
If not specified, default scheduler resolution will apply: searching for a
unique TaskScheduler
bean in the context, or for a TaskScheduler
bean named "taskScheduler" otherwise; the same lookup will also be performed for
a ScheduledExecutorService
bean. If neither of the two is resolvable,
a local single-threaded default scheduler will be created within the registrar.
DEFAULT_TASK_SCHEDULER_BEAN_NAME
public void setEmbeddedValueResolver(org.springframework.util.StringValueResolver resolver)
EmbeddedValueResolverAware
setEmbeddedValueResolver
in interface EmbeddedValueResolverAware
public void setBeanName(String beanName)
setBeanName
in interface org.springframework.beans.factory.BeanNameAware
public void setBeanFactory(org.springframework.beans.factory.BeanFactory beanFactory)
BeanFactory
available is optional; if not set,
SchedulingConfigurer
beans won't get autodetected and
a scheduler
has to be explicitly configured.setBeanFactory
in interface org.springframework.beans.factory.BeanFactoryAware
public void setApplicationContext(ApplicationContext applicationContext)
ApplicationContext
is optional: If set, registered
tasks will be activated in the ContextRefreshedEvent
phase;
if not set, it will happen at afterSingletonsInstantiated()
time.setApplicationContext
in interface ApplicationContextAware
applicationContext
- the ApplicationContext object to be used by this objectBeanInitializationException
public void afterSingletonsInstantiated()
afterSingletonsInstantiated
in interface org.springframework.beans.factory.SmartInitializingSingleton
public void onApplicationEvent(ContextRefreshedEvent event)
ApplicationListener
onApplicationEvent
in interface ApplicationListener<ContextRefreshedEvent>
event
- the event to respond topublic void postProcessMergedBeanDefinition(org.springframework.beans.factory.support.RootBeanDefinition beanDefinition, Class<?> beanType, String beanName)
postProcessMergedBeanDefinition
in interface org.springframework.beans.factory.support.MergedBeanDefinitionPostProcessor
public Object postProcessBeforeInitialization(Object bean, String beanName)
postProcessBeforeInitialization
in interface org.springframework.beans.factory.config.BeanPostProcessor
public Object postProcessAfterInitialization(Object bean, String beanName)
postProcessAfterInitialization
in interface org.springframework.beans.factory.config.BeanPostProcessor
protected void processScheduled(Scheduled scheduled, Method method, Object bean)
@Scheduled
method declaration on the given bean.scheduled
- the @Scheduled annotationmethod
- the method that the annotation has been declared onbean
- the target bean instancecreateRunnable(Object, Method)
protected Runnable createRunnable(Object target, Method method)
Runnable
for the given bean instance,
calling the specified scheduled method.
The default implementation creates a ScheduledMethodRunnable
.
target
- the target bean instancemethod
- the scheduled method to callScheduledMethodRunnable(Object, Method)
public Set<ScheduledTask> getScheduledTasks()
Scheduled
methods
as well as from programmatic SchedulingConfigurer
interaction.getScheduledTasks
in interface ScheduledTaskHolder
public void postProcessBeforeDestruction(Object bean, String beanName)
postProcessBeforeDestruction
in interface org.springframework.beans.factory.config.DestructionAwareBeanPostProcessor
public boolean requiresDestruction(Object bean)
requiresDestruction
in interface org.springframework.beans.factory.config.DestructionAwareBeanPostProcessor
public void destroy()
destroy
in interface org.springframework.beans.factory.DisposableBean