public class AutowiredAnnotationBeanPostProcessor extends ObjectSE implements SmartInstantiationAwareBeanPostProcessor, MergedBeanDefinitionPostProcessor, PriorityOrdered, BeanFactoryAware
BeanPostProcessor 実装。挿入されるそのようなメンバーは、アノテーションによって検出されます。デフォルトでは、Spring の @Autowired および @Value アノテーションです。 また、Spring 自身の @Autowired の直接的な代替手段として、JSR-330 の @InjectEE アノテーション(使用可能な場合)をサポートします。
任意の所与の Bean クラスの唯一のコンストラクターは Spring Bean として使用される場合 autowire にコンストラクターを示す true に 'required' 属性セットでこのアノテーションを宣言することができます。さらに、'required' 属性が true に設定されている場合、単一のコンストラクターのみに @Autowired のアノテーションを付けることができます。複数の不要なコンストラクターがアノテーションを宣言する場合、オートワイヤーの候補と見なされます。Spring コンテナー内の Bean を一致させることで満たすことができる依存関係の数が最も多いコンストラクターが選択されます。どの候補も満たすことができない場合、プライマリ / デフォルトコンストラクター(存在する場合)が使用されます。クラスが最初に単一のコンストラクターのみを宣言する場合、アノテーションが付けられていなくても、常に使用されます。アノテーション付きコンストラクターはパブリックである必要はありません。
Bean の構築直後、設定メソッドが呼び出される前に、フィールドが注入されます。このような構成フィールドはパブリックである必要はありません。
構成メソッドには、任意の名前と任意の数の引数を指定できます。これらの各引数は、Spring コンテナー内の一致する Bean と自動接続されます。Bean プロパティ setter メソッドは、事実上、このような一般的な構成メソッドの特殊なケースにすぎません。構成メソッドはパブリックである必要はありません。
デフォルトの AutowiredAnnotationBeanPostProcessor は、"context:annotation-config" および "context:component-scan" XML タグによって登録されます。カスタム AutowiredAnnotationBeanPostProcessor Bean 定義を指定する場合は、デフォルトのアノテーション構成を削除するかオフにします。
注 :XML インジェクションの前にアノテーションインジェクションが実行されます。後者の構成は、両方のアプローチで接続されたプロパティの前者をオーバーライドします。
前述の通常のインジェクションポイントに加えて、このポストプロセッサーは、実行時にコンテナーによって置き換えられるルックアップメソッドを識別する Spring の @Lookup アノテーションも処理します。これは、本質的に getBean(Class, args) および getBean(String, args) の型安全バージョンです。詳細については、@Lookup's javadoc を参照してください。
setAutowiredAnnotationType(java.lang.Class<? extends java.lang.annotation.Annotation>), Autowired, Value| 修飾子と型 | フィールドと説明 |
|---|---|
protected Log | logger |
HIGHEST_PRECEDENCE, LOWEST_PRECEDENCE| コンストラクターと説明 |
|---|
AutowiredAnnotationBeanPostProcessor() |
| 修飾子と型 | メソッドと説明 |
|---|---|
ConstructorSE<?>[] | determineCandidateConstructors(ClassSE<?> beanClass, StringSE beanName) 指定された Bean に使用する候補コンストラクターを決定します。 |
protected boolean | determineRequiredStatus(AnnotationAttributes ann) 使用すべきではありません。 5.2 以降、 determineRequiredStatus(MergedAnnotation) を推奨 |
protected boolean | determineRequiredStatus(MergedAnnotation<?> ann) アノテーション付きのフィールドまたはメソッドに依存関係が必要かどうかを判断します。 |
protected <T> MapSE<StringSE,T> | findAutowireCandidates(ClassSE<T> type) 指定された型のすべての Bean をオートワイヤー候補として取得します。 |
int | getOrder() このオブジェクトの順序値を取得します。 |
void | postProcessMergedBeanDefinition(RootBeanDefinition beanDefinition, ClassSE<?> beanType, StringSE beanName) 指定された Bean の指定されたマージ済み Bean 定義を後処理します。 |
PropertyValues | postProcessProperties(PropertyValues pvs, ObjectSE bean, StringSE beanName) ファクトリが特定の Bean に適用する前に、特定のプロパティ値を後処理します。プロパティ記述子は必要ありません。 |
PropertyValues | postProcessPropertyValues(PropertyValues pvs, PropertyDescriptorSE[] pds, ObjectSE bean, StringSE beanName) 使用すべきではありません。 |
void | processInjection(ObjectSE bean) 任意のターゲットインスタンスを使用した直接呼び出しのための「ネイティブ」処理メソッド。設定された「オートワイヤー」アノテーション型のいずれかでアノテーションが付けられたすべてのフィールドとメソッドを解決します。 |
void | resetBeanDefinition(StringSE beanName) 指定された名前の Bean 定義がリセットされ、このポストプロセッサーが影響を受ける Bean のメタデータをクリアする必要があるという通知。 |
void | setAutowiredAnnotationType(ClassSE<? extends AnnotationSE> autowiredAnnotationType) コンストラクター、フィールド、setter メソッド、任意の構成メソッドで使用される「オートワイヤー」アノテーション型を設定します。 |
void | setAutowiredAnnotationTypes(SetSE<ClassSE<? extends AnnotationSE>> autowiredAnnotationTypes) コンストラクター、フィールド、setter メソッド、任意の構成メソッドで使用される「オートワイヤー」アノテーション型を設定します。 |
void | setBeanFactory(BeanFactory beanFactory) 所有ファクトリを Bean インスタンスに提供するコールバック。 |
void | setOrder(int order) |
void | setRequiredParameterName(StringSE requiredParameterName) 必要かどうかを指定するアノテーションの属性の名前を設定します。 |
void | setRequiredParameterValue(boolean requiredParameterValue) 必要に応じて依存関係をマークするブール値を設定します。 |
cloneSE, equalsSE, finalizeSE, getClassSE, hashCodeSE, notifySE, notifyAllSE, toStringSE, waitSE, waitSE, waitSEgetEarlyBeanReference, predictBeanTypepostProcessAfterInstantiation, postProcessBeforeInstantiationpostProcessAfterInitialization, postProcessBeforeInitializationprotected final Log logger
public AutowiredAnnotationBeanPostProcessor()
@Autowired および @Value アノテーション用の新しい AutowiredAnnotationBeanPostProcessor を作成します。JSR-330 の @InjectEE アノテーションもサポートします(可能な場合)。
public void setAutowiredAnnotationType(ClassSE<? extends AnnotationSE> autowiredAnnotationType)
デフォルトのオートワイヤーアノテーション型は、Spring が提供する @Autowired および @Value アノテーションと、JSR-330 の @InjectEE アノテーション(使用可能な場合)です。
この setter プロパティは、開発者が独自の(Spring 固有ではない)アノテーション型を提供して、メンバーがオートワイヤーされることになっていることを示すために存在します。
public void setAutowiredAnnotationTypes(SetSE<ClassSE<? extends AnnotationSE>> autowiredAnnotationTypes)
デフォルトのオートワイヤーアノテーション型は、Spring が提供する @Autowired および @Value アノテーションと、JSR-330 の @InjectEE アノテーション(使用可能な場合)です。
この setter プロパティは、開発者が独自の(Spring 固有ではない)アノテーション型を提供して、メンバーがオートワイヤーされることになっていることを示すために存在します。
public void setRequiredParameterName(StringSE requiredParameterName)
public void setRequiredParameterValue(boolean requiredParameterValue)
たとえば、"required = true" (デフォルト)を使用する場合、この値は true である必要があります。ただし、"optional = false" を使用する場合、この値は false でなければなりません。
public void setOrder(int order)
public int getOrder()
Ordered 値が高いほど、優先度は低くなります。結果として、最も低い値を持つオブジェクトが最高の優先度を持ちます(サーブレット load-on-startup の値に多少似ています)。
同じ順序の値は、影響を受けるオブジェクトの任意のソート位置になります。
Ordered の getOrder Ordered.HIGHEST_PRECEDENCE, Ordered.LOWEST_PRECEDENCEpublic void setBeanFactory(BeanFactory beanFactory)
BeanFactoryAware 通常の Bean プロパティの設定後、ただし InitializingBean.afterPropertiesSet() またはカスタム init-method などの初期化コールバックの前に呼び出されます。
BeanFactoryAware の setBeanFactory beanFactory - 所有 BeanFactory(非 null)。Bean は、ファクトリのメソッドをすぐに呼び出すことができます。BeanInitializationExceptionpublic void postProcessMergedBeanDefinition(RootBeanDefinition beanDefinition, ClassSE<?> beanType, StringSE beanName)
MergedBeanDefinitionPostProcessorMergedBeanDefinitionPostProcessor の postProcessMergedBeanDefinition beanDefinition - Bean のマージされた Bean 定義 beanType - 管理対象 Bean インスタンスの実際の型 beanName - Bean の名前 AbstractAutowireCapableBeanFactory.applyMergedBeanDefinitionPostProcessors(org.springframework.beans.factory.support.RootBeanDefinition, java.lang.Class<?>, java.lang.String)public void resetBeanDefinition(StringSE beanName)
MergedBeanDefinitionPostProcessorデフォルトの実装は空です。
MergedBeanDefinitionPostProcessor の resetBeanDefinition beanName - Bean の名前 DefaultListableBeanFactory.resetBeanDefinition(java.lang.String)@Nullable public ConstructorSE<?>[] determineCandidateConstructors(ClassSE<?> beanClass, StringSE beanName) throws BeanCreationException
SmartInstantiationAwareBeanPostProcessor デフォルトの実装は null を返します。
SmartInstantiationAwareBeanPostProcessor の determineCandidateConstructors beanClass - Bean の生のクラス (非 null)beanName - Bean の名前 null BeanCreationExceptionpublic PropertyValues postProcessProperties(PropertyValues pvs, ObjectSE bean, StringSE beanName)
InstantiationAwareBeanPostProcessor 実装は、カスタム InstantiationAwareBeanPostProcessor.postProcessPropertyValues(org.springframework.beans.PropertyValues, java.beans.PropertyDescriptor[], java.lang.Object, java.lang.String) 実装を提供する場合は null (デフォルト)を返し、そうでない場合は pvs を返す必要があります。このインターフェースの将来のバージョン(InstantiationAwareBeanPostProcessor.postProcessPropertyValues(org.springframework.beans.PropertyValues, java.beans.PropertyDescriptor[], java.lang.Object, java.lang.String) が削除された)では、デフォルトの実装は、指定された pvs をそのまま直接返します。
InstantiationAwareBeanPostProcessor の postProcessProperties pvs - ファクトリが適用しようとしているプロパティ値 (非 null)bean - Bean インスタンスは作成されましたが、そのプロパティはまだ設定されていません beanName - Bean の名前 InstantiationAwareBeanPostProcessor.postProcessPropertyValues(org.springframework.beans.PropertyValues, java.beans.PropertyDescriptor[], java.lang.Object, java.lang.String) の呼び出しを継続する null (現在の Bean クラスに初期化された PropertyDescriptor が必要)InstantiationAwareBeanPostProcessor.postProcessPropertyValues(org.springframework.beans.PropertyValues, java.beans.PropertyDescriptor[], java.lang.Object, java.lang.String)@DeprecatedSE 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), MutablePropertyValuespublic void processInjection(ObjectSE bean) throws BeanCreationException
bean - 処理するターゲットインスタンス BeanCreationException - オートワイヤーが失敗した場合 setAutowiredAnnotationTypes(Set)protected boolean determineRequiredStatus(MergedAnnotation<?> ann)
「必須」の依存関係は、Bean が見つからないときにオートワイヤーが失敗することを意味します。それ以外の場合、Bean が見つからない場合、オートワイヤープロセスはフィールドまたはメソッドを単にバイパスします。
ann - Autowired アノテーション @DeprecatedSE protected boolean determineRequiredStatus(AnnotationAttributes ann)
determineRequiredStatus(MergedAnnotation) に置き換えられました。「必須」の依存関係は、Bean が見つからないときにオートワイヤーが失敗することを意味します。それ以外の場合、Bean が見つからない場合、オートワイヤープロセスはフィールドまたはメソッドを単にバイパスします。
ann - Autowired アノテーション protected <T> MapSE<StringSE,T> findAutowireCandidates(ClassSE<T> type) throws BeansException
type - Bean の型 BeansException - Bean の取得に失敗した場合