public class MethodInvokingJobDetailFactoryBean extends ArgumentConvertingMethodInvoker implements FactoryBean<JobDetail>, BeanNameAware, BeanClassLoaderAware, BeanFactoryAware, InitializingBean
JobDetail
オブジェクトを公開する FactoryBean
。Spring で管理されているターゲット Bean で既存のサービスメソッドを呼び出すだけの 1 行の Quartz ジョブを実装する必要がありません。MethodInvoker
基本クラスから "targetObject"
や "targetMethod"
などの共通構成プロパティを継承し、"targetBeanName"
プロパティを介してターゲット Bean を名前で検索するサポートを追加します ( "targetObject" を直接指定する代わりに、非シングルトンターゲットオブジェクトを許可します)。
"concurrent" プロパティにより、同時に実行されているジョブと現在実行されていないジョブの両方をサポートします。この MethodInvokingJobDetailFactoryBean によって作成されたジョブは、デフォルトで揮発性と耐久性があります(Quartz の用語によると)。
注: JobDetails この FactoryBean 経由で作成、シリアライズして永続的なジョブのストアに適していないではありません。永続的なジョブが特定のサービスメソッドに委譲されるようにする各ケースで、独自の Quartz ジョブをシンラッパーとして実装する必要があります。
Spring 4.1 の時点で、Quartz 2.1.4 以降と互換性があります。
setTargetBeanName(java.lang.String)
, MethodInvoker.setTargetObject(java.lang.Object)
, MethodInvoker.setTargetMethod(java.lang.String)
, setConcurrent(boolean)
修飾子と型 | クラスと説明 |
---|---|
static class | MethodInvokingJobDetailFactoryBean.MethodInvokingJob Quartz 指定されたメソッドを呼び出すジョブ実装。 |
static class | MethodInvokingJobDetailFactoryBean.StatefulMethodInvokingJob StatefulJob インターフェースを実装する MethodInvokingJob の拡張。 |
targetClass
OBJECT_TYPE_ATTRIBUTE
コンストラクターと説明 |
---|
MethodInvokingJobDetailFactoryBean() |
修飾子と型 | メソッドと説明 |
---|---|
void | afterPropertiesSet() |
JobDetail | getObject() このファクトリによって管理されるオブジェクトのインスタンス(おそらく共有または独立)を返します。 |
ClassSE<? extends JobDetail> | getObjectType() この FactoryBean が作成するオブジェクトの型、または事前に不明な場合は null を返します。 |
ClassSE<?> | getTargetClass() "targetBeanName" 機能をサポートするためにオーバーライドされます。 |
ObjectSE | getTargetObject() "targetBeanName" 機能をサポートするためにオーバーライドされます。 |
boolean | isSingleton() このファクトリによって管理されるオブジェクトはシングルトンですか? つまり、 FactoryBean.getObject() は常に同じオブジェクト(キャッシュ可能な参照)を返しますか? |
protected void | postProcessJobDetail(JobDetail jobDetail) この FactoryBean によって公開される JobDetail を後処理するためのコールバック。 |
protected ClassSE<?> | resolveClassName(StringSE className) 指定されたクラス名をクラスに解決します。 |
void | setBeanClassLoader(ClassLoaderSE classLoader) Bean class loader SE を Bean インスタンスに提供するコールバック。 |
void | setBeanFactory(BeanFactory beanFactory) 所有ファクトリを Bean インスタンスに提供するコールバック。 |
void | setBeanName(StringSE beanName) この Bean を作成した Bean ファクトリで Bean の名前を設定します。 |
void | setConcurrent(boolean concurrent) 複数のジョブを同時に実行するかどうかを指定します。 |
void | setGroup(StringSE group) ジョブのグループを設定します。 |
void | setName(StringSE name) ジョブの名前を設定します。 |
void | setTargetBeanName(StringSE targetBeanName) Spring BeanFactory でターゲット Bean の名前を設定します。 |
doFindMatchingMethod, findMatchingMethod, getDefaultTypeConverter, getTypeConverter, registerCustomEditor, setTypeConverter
getArguments, getPreparedMethod, getTargetMethod, getTypeDifferenceWeight, invoke, isPrepared, prepare, setArguments, setStaticMethod, setTargetClass, setTargetMethod, setTargetObject
cloneSE, equalsSE, finalizeSE, getClassSE, hashCodeSE, notifySE, notifyAllSE, toStringSE, waitSE, waitSE, waitSE
public void setName(StringSE name)
デフォルトは、この FactoryBean の Bean 名です。
public void setGroup(StringSE group)
デフォルトは、スケジューラのデフォルトグループです。
public void setConcurrent(boolean concurrent)
@PersistJobDataAfterExecution
および @DisallowConcurrentExecution
マーカーを追加することで実現されます。ステートフルジョブとステートレスジョブの詳細については、こちらを参照してください。デフォルト設定では、ジョブを同時に実行します。
public void setTargetBeanName(StringSE targetBeanName)
これは、"targetObject"
を指定する代わりに、非シングルトン Bean を呼び出すことを可能にするものです。指定された "targetObject" および "targetClass"
の値は、この "targetBeanName" 設定の対応する効果を上書きすることに注意してください (つまり、Bean 型または Bean オブジェクトを静的に事前定義します)。
public void setBeanName(StringSE beanName)
BeanNameAware
通常の Bean プロパティの設定後、ただし InitializingBean.afterPropertiesSet()
またはカスタム init メソッドなどの init コールバックの前に呼び出されます。
BeanNameAware
の setBeanName
beanName
- ファクトリ内の Bean の名前。この名前は、ファクトリで使用される実際の Bean 名であり、最初に指定した名前とは異なる場合があります。特に内部 Bean 名の場合、実際の Bean 名は "#..." サフィックスを追加することで一意になります。必要に応じて、BeanFactoryUtils.originalBeanName(String)
メソッドを使用して、元の Bean 名(サフィックスなし)を抽出します。public void setBeanClassLoader(ClassLoaderSE classLoader)
BeanClassLoaderAware
class loader
SE を Bean インスタンスに提供するコールバック。 通常の Bean プロパティの設定後、ただし InitializingBean's
InitializingBean.afterPropertiesSet()
メソッドやカスタム init-method などの初期化コールバックの前に呼び出されます。
BeanClassLoaderAware
の setBeanClassLoader
classLoader
- 所有クラスローダー public void setBeanFactory(BeanFactory beanFactory)
BeanFactoryAware
通常の Bean プロパティの設定後、ただし InitializingBean.afterPropertiesSet()
またはカスタム init-method などの初期化コールバックの前に呼び出されます。
BeanFactoryAware
の setBeanFactory
beanFactory
- 所有 BeanFactory(非 null
)。Bean は、ファクトリのメソッドをすぐに呼び出すことができます。BeanInitializationException
protected ClassSE<?> resolveClassName(StringSE className) throws ClassNotFoundExceptionSE
MethodInvoker
デフォルトの実装では、スレッドコンテキストクラスローダーを使用して ClassUtils.forName
を使用します。
MethodInvoker
の resolveClassName
className
- 解決するクラス名 ClassNotFoundExceptionSE
- クラス名が無効だった場合 public void afterPropertiesSet() throws ClassNotFoundExceptionSE, NoSuchMethodExceptionSE
InitializingBean
BeanFactoryAware
、ApplicationContextAware
などを満たした後、包含 BeanFactory
によって呼び出されます。このメソッドにより、Bean インスタンスは、すべての Bean プロパティが設定されたときに、その全体的な構成の検証と最終的な初期化を実行できます。
InitializingBean
の afterPropertiesSet
ClassNotFoundExceptionSE
NoSuchMethodExceptionSE
protected void postProcessJobDetail(JobDetail jobDetail)
デフォルトの実装は空です。サブクラスでオーバーライドできます。
jobDetail
- この FactoryBean によって準備された JobDetailpublic ClassSE<?> getTargetClass()
"targetBeanName"
機能をサポートするためにオーバーライドされます。MethodInvoker
の getTargetClass
public ObjectSE getTargetObject()
"targetBeanName"
機能をサポートするためにオーバーライドされます。MethodInvoker
の getTargetObject
@Nullable public JobDetail getObject()
FactoryBean
BeanFactory
と同様に、これにより、シングルトンとプロトタイプの両方のデザインパターンをサポートできます。
この FactoryBean が呼び出し時にまだ完全に初期化されていない場合(たとえば、循環参照に関係しているため)、対応する FactoryBeanNotInitializedException
をスローします。
Spring 2.0 以降、FactoryBeans は null
オブジェクトを返すことができます。ファクトリはこれを通常の値として使用します。この場合、FactoryBeanNotInitializedException はスローされません。FactoryBean の実装では、必要に応じて FactoryBeanNotInitializedException 自体をすぐにスローすることをお勧めします。
FactoryBean<JobDetail>
の getObject
null
にすることができます)FactoryBeanNotInitializedException
public ClassSE<? extends JobDetail> getObjectType()
FactoryBean
null
を返します。これにより、たとえばオートワイヤーなどで、オブジェクトをインスタンス化せずに特定の型の Bean を確認できます。
シングルトンオブジェクトを作成している実装の場合、このメソッドはシングルトンの作成を可能な限り回避しようとします。むしろ、事前に型を推定する必要があります。プロトタイプの場合、ここで意味のある型を返すこともお勧めします。
このメソッドは、この FactoryBean が完全に初期化される前に呼び出すことができます。初期化中に作成された状態に依存しないでください。もちろん、利用可能な場合はそのような状態を引き続き使用できます。
注意 : オートワイヤーは、ここで null
を返す FactoryBeans を単に無視します。FactoryBean の現在の状態を使用して、このメソッドを適切に実装することを強くお勧めします。
FactoryBean<JobDetail>
の getObjectType
null
ListableBeanFactory.getBeansOfType(java.lang.Class<T>)
public boolean isSingleton()
FactoryBean
FactoryBean.getObject()
は常に同じオブジェクト(キャッシュ可能な参照)を返しますか? 注意 : FactoryBean がシングルトンオブジェクトを保持することを示す場合、getObject()
から返されたオブジェクトは所有 BeanFactory によってキャッシュされる可能性があります。FactoryBean が常に同じ参照を公開しない限り、true
を返さないでください。
FactoryBean 自体のシングルトンステータスは、通常、所有する BeanFactory によって提供されます。通常、そこではシングルトンとして定義する必要があります。
注意 : false
を返すこのメソッドは、返されるオブジェクトが独立したインスタンスであることを必ずしも示しません。拡張 SmartFactoryBean
インターフェースの実装は、SmartFactoryBean.isPrototype()
メソッドを通じて独立したインスタンスを明示的に示す場合があります。この拡張インターフェースを実装しないプレーンな FactoryBean
実装は、isSingleton()
実装が false
を返す場合、常に独立したインスタンスを返すと単純に想定されます。
FactoryBean
は通常シングルトンインスタンスを管理するため、デフォルトの実装では true
が返されます。
FactoryBean<JobDetail>
の isSingleton
FactoryBean.getObject()
, SmartFactoryBean.isPrototype()