public class AutowiredAnnotationBeanPostProcessor extends InstantiationAwareBeanPostProcessorAdapter implements MergedBeanDefinitionPostProcessor, PriorityOrdered, BeanFactoryAware
BeanPostProcessor
実装。このような注入されるメンバーは、Java 5 アノテーションを通じて検出されます。デフォルトでは、Spring の @Autowired
および @Value
アノテーションです。 また、Spring 自身の @Autowired
の直接的な代替手段として、JSR-330 の @Inject
EE アノテーション(使用可能な場合)をサポートします。
任意の Bean クラスのコンストラクター (最大) 1 つだけが、'required' パラメーターを true
に設定してこのアノテーションを宣言できます。これは、Spring Bean として使用される場合にオートワイヤーするコンストラクターを示します。 必須でないコンストラクターが複数このアノテーションを宣言する場合、オートワイヤーの候補と見なされます。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() Spring の標準 Autowired アノテーション用に新しい AutowiredAnnotationBeanPostProcessor を作成します。 |
修飾子と型 | メソッドと説明 |
---|---|
ConstructorSE<?>[] | determineCandidateConstructors(ClassSE<?> beanClass, StringSE beanName) 指定された Bean に使用する候補コンストラクターを決定します。 |
protected boolean | determineRequiredStatus(AnnotationAttributes ann) アノテーション付きのフィールドまたはメソッドに依存関係が必要かどうかを判断します。 |
protected <T> MapSE<StringSE,T> | findAutowireCandidates(ClassSE<T> type) 指定された型のすべての Bean をオートワイヤー候補として取得します。 |
int | getOrder() このオブジェクトの順序値を取得します。 |
void | postProcessMergedBeanDefinition(RootBeanDefinition beanDefinition, ClassSE<?> beanType, StringSE beanName) 指定された Bean の指定されたマージ済み Bean 定義を後処理します。 |
PropertyValues | postProcessPropertyValues(PropertyValues pvs, PropertyDescriptorSE[] pds, ObjectSE bean, StringSE beanName) ファクトリが指定された Bean に適用する前に、指定されたプロパティ値を後処理します。 |
void | processInjection(ObjectSE bean) @Autowired でアノテーションが付けられているすべてのフィールドとメソッドを解決する、任意のターゲットインスタンスを使用した直接呼び出しの「ネイティブ」処理メソッド。 |
void | setAutowiredAnnotationType(ClassSE<? extends AnnotationSE> autowiredAnnotationType) コンストラクター、フィールド、setter メソッド、任意の構成メソッドで使用される "autowired" アノテーション型を設定します。 |
void | setAutowiredAnnotationTypes(SetSE<ClassSE<? extends AnnotationSE>> autowiredAnnotationTypes) コンストラクター、フィールド、setter メソッド、任意の構成メソッドで使用される "autowired" アノテーション型を設定します。 |
void | setBeanFactory(BeanFactory beanFactory) 所有ファクトリを Bean インスタンスに提供するコールバック。 |
void | setOrder(int order) |
void | setRequiredParameterName(StringSE requiredParameterName) 必要かどうかを指定するアノテーションのパラメーターの名前を設定します。 |
void | setRequiredParameterValue(boolean requiredParameterValue) 依存関係を必須としてマークするブール値を設定します |
getEarlyBeanReference, postProcessAfterInitialization, postProcessAfterInstantiation, postProcessBeforeInitialization, postProcessBeforeInstantiation, predictBeanType
cloneSE, equalsSE, finalizeSE, getClassSE, hashCodeSE, notifySE, notifyAllSE, toStringSE, waitSE, waitSE, waitSE
postProcessAfterInitialization, postProcessBeforeInitialization
protected final Log logger
public void setAutowiredAnnotationType(ClassSE<? extends AnnotationSE> autowiredAnnotationType)
public void setAutowiredAnnotationTypes(SetSE<ClassSE<? extends AnnotationSE>> autowiredAnnotationTypes)
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_PRECEDENCE
public void setBeanFactory(BeanFactory beanFactory)
BeanFactoryAware
通常の Bean プロパティの設定後、ただし InitializingBean.afterPropertiesSet()
またはカスタム init-method などの初期化コールバックの前に呼び出されます。
BeanFactoryAware
の setBeanFactory
beanFactory
- 所有 BeanFactory(非 null
)。Bean は、ファクトリのメソッドをすぐに呼び出すことができます。BeanInitializationException
public void postProcessMergedBeanDefinition(RootBeanDefinition beanDefinition, ClassSE<?> beanType, StringSE beanName)
MergedBeanDefinitionPostProcessor
MergedBeanDefinitionPostProcessor
の postProcessMergedBeanDefinition
beanDefinition
- Bean のマージされた Bean 定義 beanType
- 管理対象 Bean インスタンスの実際の型 beanName
- Bean の名前 public ConstructorSE<?>[] determineCandidateConstructors(ClassSE<?> beanClass, StringSE beanName) throws BeanCreationException
SmartInstantiationAwareBeanPostProcessor
SmartInstantiationAwareBeanPostProcessor
の determineCandidateConstructors
InstantiationAwareBeanPostProcessorAdapter
の determineCandidateConstructors
beanClass
- Bean の生のクラス (非 null
)beanName
- Bean の名前 null
BeanCreationException
public PropertyValues postProcessPropertyValues(PropertyValues pvs, PropertyDescriptorSE[] pds, ObjectSE bean, StringSE beanName) throws BeanCreationException
InstantiationAwareBeanPostProcessor
また、通常は元の PropertyValues に基づいて新しい MutablePropertyValues インスタンスを作成し、特定の値を追加または削除して、適用するプロパティ値を置き換えることもできます。
InstantiationAwareBeanPostProcessor
の postProcessPropertyValues
InstantiationAwareBeanPostProcessorAdapter
の postProcessPropertyValues
pvs
- ファクトリが適用しようとしているプロパティ値 (非 null
)pds
- ターゲット Bean に関連するプロパティ記述子 (依存関係型が無視されている - ファクトリが特に処理する - すでに除外されている)bean
- Bean インスタンスは作成されましたが、そのプロパティはまだ設定されていません beanName
- Bean の名前 null
BeanCreationException
MutablePropertyValues
public void processInjection(ObjectSE bean) throws BeanCreationException
@Autowired
でアノテーションが付けられているすべてのフィールドとメソッドを解決する、任意のターゲットインスタンスを使用した直接呼び出しの「ネイティブ」処理メソッド。bean
- 処理するターゲットインスタンス BeanCreationException
- オートワイヤーが失敗した場合 protected boolean determineRequiredStatus(AnnotationAttributes ann)
「必須」の依存関係は、Bean が見つからないときにオートワイヤーが失敗することを意味します。それ以外の場合、Bean が見つからない場合、オートワイヤープロセスはフィールドまたはメソッドを単にバイパスします。
ann
- Autowired アノテーション protected <T> MapSE<StringSE,T> findAutowireCandidates(ClassSE<T> type) throws BeansException
type
- Bean の型 BeansException
- Bean の取得に失敗した場合