InitializingBean
実装)@DeprecatedSE public class RequiredAnnotationBeanPostProcessor extends ObjectSE implements SmartInstantiationAwareBeanPostProcessor, MergedBeanDefinitionPostProcessor, PriorityOrdered, BeanFactoryAware
BeanPostProcessor
実装。必要な Bean プロパティは、Java 5 アノテーションを通じて検出されます。デフォルトでは、Spring の Required
アノテーションです。この BeanPostProcessor が存在する動機は、開発者が独自のクラスの setter プロパティに任意の JDK 1.5 アノテーションでアノテーションを付け、コンテナーが依存性注入値の構成をチェックする必要があることを示すことです。これにより、そのようなチェックの責任がコンテナー(間違いなく所属する場所)に適切にプッシュされ、開発者が必要なすべてのプロパティが実際に設定されていることを単にチェックするメソッドをコーディングする必要が( 部分的に)なくなります。
このクラスが行うすべてのことは、「必須」プロパティが実際に値で構成されていることを強制しているため、"init" メソッドをまだ実装する必要がある場合がある(なお望ましい場合がある)ことに注意してください。それ以外 はチェックしません... 特に、構成された値が null
でないことはチェックしません。
メモ: デフォルトの RequiredAnnotationBeanPostProcessor は、"context:annotation-config" および "context:component-scan" XML タグによって登録されます。カスタム RequiredAnnotationBeanPostProcessor Bean 定義を指定する場合は、デフォルトのアノテーション構成を削除するか、そこでオフにします。
setRequiredAnnotationType(java.lang.Class<? extends java.lang.annotation.Annotation>)
, Required
修飾子と型 | フィールドと説明 |
---|---|
static StringSE | SKIP_REQUIRED_CHECK_ATTRIBUTE 使用すべきではありません。 このポストプロセッサーの必要なプロパティチェックを実行するときに、特定の Bean がスキップされることになっているかどうかを示す Bean 定義属性。 |
HIGHEST_PRECEDENCE, LOWEST_PRECEDENCE
コンストラクターと説明 |
---|
RequiredAnnotationBeanPostProcessor() 使用すべきではありません。 |
修飾子と型 | メソッドと説明 |
---|---|
int | getOrder() 使用すべきではありません。 このオブジェクトの順序値を取得します。 |
protected ClassSE<? extends AnnotationSE> | getRequiredAnnotationType() 使用すべきではありません。 「必須」のアノテーション型を返します。 |
protected boolean | isRequiredProperty(PropertyDescriptorSE propertyDescriptor) 使用すべきではありません。 提供されたプロパティは値を持つ必要がありますか(つまり、依存関係が注入される必要があります)? |
void | postProcessMergedBeanDefinition(RootBeanDefinition beanDefinition, ClassSE<?> beanType, StringSE beanName) 使用すべきではありません。 指定された Bean の指定されたマージ済み Bean 定義を後処理します。 |
PropertyValues | postProcessPropertyValues(PropertyValues pvs, PropertyDescriptorSE[] pds, ObjectSE bean, StringSE beanName) 使用すべきではありません。 ファクトリが指定された Bean に適用する前に、指定されたプロパティ値を後処理します。 |
void | setBeanFactory(BeanFactory beanFactory) 使用すべきではありません。 所有ファクトリを Bean インスタンスに提供するコールバック。 |
void | setOrder(int order) 使用すべきではありません。 |
void | setRequiredAnnotationType(ClassSE<? extends AnnotationSE> requiredAnnotationType) 使用すべきではありません。 Bean プロパティの setter メソッドで使用される「必須」のアノテーション型を設定します。 |
protected boolean | shouldSkip(ConfigurableListableBeanFactory beanFactory, StringSE beanName) 使用すべきではありません。 指定された Bean 定義が、このポストプロセッサーによって実行されるアノテーションベースの必須プロパティ検査の対象になっていないかどうかを確認します。 |
cloneSE, equalsSE, finalizeSE, getClassSE, hashCodeSE, notifySE, notifyAllSE, toStringSE, waitSE, waitSE, waitSE
determineCandidateConstructors, getEarlyBeanReference, predictBeanType
postProcessAfterInstantiation, postProcessBeforeInstantiation, postProcessProperties
postProcessAfterInitialization, postProcessBeforeInitialization
resetBeanDefinition
public static final StringSE SKIP_REQUIRED_CHECK_ATTRIBUTE
public RequiredAnnotationBeanPostProcessor()
public void setRequiredAnnotationType(ClassSE<? extends AnnotationSE> requiredAnnotationType)
デフォルトの必須アノテーション型は、Spring が提供する Required
アノテーションです。
この setter プロパティが存在するため、開発者は独自の(Spring 固有ではない)アノテーション型を提供して、プロパティ値が必要であることを示すことができます。
protected ClassSE<? extends AnnotationSE> getRequiredAnnotationType()
public void setBeanFactory(BeanFactory beanFactory)
BeanFactoryAware
通常の Bean プロパティの設定後、ただし InitializingBean.afterPropertiesSet()
またはカスタム init-method などの初期化コールバックの前に呼び出されます。
BeanFactoryAware
の setBeanFactory
beanFactory
- 所有 BeanFactory(非 null
)。Bean は、ファクトリのメソッドをすぐに呼び出すことができます。BeanInitializationException
public void setOrder(int order)
public int getOrder()
Ordered
値が高いほど、優先度は低くなります。結果として、最も低い値を持つオブジェクトが最高の優先度を持ちます(サーブレット load-on-startup
の値に多少似ています)。
同じ順序の値は、影響を受けるオブジェクトの任意のソート位置になります。
Ordered
の getOrder
Ordered.HIGHEST_PRECEDENCE
, Ordered.LOWEST_PRECEDENCE
public void postProcessMergedBeanDefinition(RootBeanDefinition beanDefinition, ClassSE<?> beanType, StringSE beanName)
MergedBeanDefinitionPostProcessor
MergedBeanDefinitionPostProcessor
の postProcessMergedBeanDefinition
beanDefinition
- Bean のマージされた Bean 定義 beanType
- 管理対象 Bean インスタンスの実際の型 beanName
- Bean の名前 AbstractAutowireCapableBeanFactory.applyMergedBeanDefinitionPostProcessors(org.springframework.beans.factory.support.RootBeanDefinition, java.lang.Class<?>, java.lang.String)
public PropertyValues postProcessPropertyValues(PropertyValues pvs, PropertyDescriptorSE[] pds, ObjectSE bean, StringSE beanName)
InstantiationAwareBeanPostProcessor
また、通常は元の PropertyValues に基づいて新しい MutablePropertyValues インスタンスを作成し、特定の値を追加または削除して、適用するプロパティ値を置き換えることもできます。
デフォルトの実装は、指定された pvs
をそのまま返します。
InstantiationAwareBeanPostProcessor
の postProcessPropertyValues
pvs
- ファクトリが適用しようとしているプロパティ値 (非 null
)pds
- ターゲット Bean に関連するプロパティ記述子 (依存関係型が無視されている - ファクトリが特に処理する - すでに除外されている)bean
- Bean インスタンスは作成されましたが、そのプロパティはまだ設定されていません beanName
- Bean の名前 null
InstantiationAwareBeanPostProcessor.postProcessProperties(org.springframework.beans.PropertyValues, java.lang.Object, java.lang.String)
, MutablePropertyValues
protected boolean shouldSkip(@Nullable ConfigurableListableBeanFactory beanFactory, StringSE beanName)
デフォルトの実装では、Bean 定義に SKIP_REQUIRED_CHECK_ATTRIBUTE
属性があるかどうかを確認します。また、インスタンスベースのファクトリに Bean が事前に設定されていると想定して、"factory-bean" リファレンスセットを含む Bean 定義の場合はスキップすることも提案しています。
beanFactory
- チェックする BeanFactorybeanName
- チェックする Bean の名前 true
。それを処理する false
protected boolean isRequiredProperty(PropertyDescriptorSE propertyDescriptor)
この実装は、提供された property
SE 上の "required" annotation
の存在を探します。
propertyDescriptor
- ターゲット PropertyDescriptor (非 null
)true
。ない場合、または指定されたプロパティに setter メソッドがない場合は false