public class CommonAnnotationBeanPostProcessor extends InitDestroyAnnotationBeanPostProcessor implements InstantiationAwareBeanPostProcessor, BeanFactoryAware, java.io.Serializable
javax.annotation
パッケージの JSR-250 アノテーションをサポートする BeanPostProcessor
実装。これらの一般的な Java アノテーションは、Java 6 の JAX-WS だけでなく、多くの Java EE 5 テクノロジー(JSF 1.2 など)でもサポートされています。 このポストプロセッサーには、PostConstruct
EE アノテーションと PreDestroy
EE アノテーションのサポートが含まれています。それぞれ、init アノテーションと destroy アノテーションとして、事前設定されたアノテーション型を使用して InitDestroyAnnotationBeanPostProcessor
から継承します。
中心的な要素は、デフォルトでは、ZN で解決される mappedName
参照のみを含む、Spring BeanFactory を含む、名前付き Bean のアノテーション駆動型注入のための Resource
EE アノテーションです。"alwaysUseJndiLookup" flag
は、name
参照およびデフォルト名にも標準の Java EE 5 リソースインジェクションと同等の JNDI ルックアップを適用します。ターゲット Bean は単純な POJO にすることができ、型が一致する必要があること以外に特別な要件はありません。
JAX-WS WebServiceRef
EE アノテーションもサポートされています。これは Resource
EE に類似していますが、特定の JAX-WS サービスエンドポイントを作成する機能があります。これは、明示的に定義されたリソースを名前で指すか、ローカルに指定された JAX-WS サービスクラスで動作します。最後に、このポストプロセッサーは、Resource
EE に類似した EJB 3 EJB
EE アノテーションもサポートし、フォールバック取得のためにローカル Bean 名とグローバル JNDI 名の両方を指定できます。この場合、ターゲット Bean はプレーンな POJO および EJB 3 セッション Bean にすることができます。
このポストプロセッサーでサポートされる共通のアノテーションは、Java 6(JDK 1.6)と Java EE 5/6(共通のアノテーションにスタンドアロンの jar を提供し、任意の Java 5 ベースのアプリケーションで使用できるようにする)で利用できます。
デフォルトの使用箇所では、リソース名を Spring Bean 名として解決するには、アプリケーションコンテキストで次のように定義するだけです。
<bean class="org.springframework.context.annotation.CommonAnnotationBeanPostProcessor"/>直接 JNDI アクセスの場合、Java EE アプリケーションの "java:comp/env/" 名前空間内の JNDI リソース参照としてリソース名を解決するには、以下を使用します。
<bean class="org.springframework.context.annotation.CommonAnnotationBeanPostProcessor"> <property name="alwaysUseJndiLookup" value="true"/> </bean>
mappedName
参照は常に JNDI で解決され、グローバル JNDI 名 ( "java:" プレフィックスを含む) も許可されます。"alwaysUseJndiLookup" フラグは、name
参照とデフォルト名 (フィールド名 / プロパティ名から推測) にのみ影響します。注意 : デフォルトの CommonAnnotationBeanPostProcessor は、"context:annotation-config" および "context:component-scan" XML タグによって登録されます。カスタム CommonAnnotationBeanPostProcessor Bean 定義を指定する場合は、デフォルトのアノテーション設定を削除するかオフにしてください!
注 :XML インジェクションの前にアノテーションインジェクションが実行されます。後者の構成は、両方のアプローチで接続されたプロパティの前者をオーバーライドします。
修飾子と型 | クラスと説明 |
---|---|
protected class | CommonAnnotationBeanPostProcessor.LookupElement @Resource および関連するアノテーションをサポートする、アノテーション付きフィールドまたは setter メソッドに関する一般的な注入情報を表すクラス。 |
logger
HIGHEST_PRECEDENCE, LOWEST_PRECEDENCE
コンストラクターと説明 |
---|
CommonAnnotationBeanPostProcessor() init および destroy アノテーション型をそれぞれ PostConstruct EE および PreDestroy EE に設定して、新しい CommonAnnotationBeanPostProcessor を作成します。 |
修飾子と型 | メソッドと説明 |
---|---|
protected java.lang.Object | autowireResource(BeanFactory factory, CommonAnnotationBeanPostProcessor.LookupElement element, java.lang.String requestingBeanName) 指定されたファクトリに基づいたオートワイヤーを介して、指定された名前と型のリソースオブジェクトを取得します。 |
protected java.lang.Object | buildLazyResourceProxy(CommonAnnotationBeanPostProcessor.LookupElement element, java.lang.String requestingBeanName) 指定された名前と型の遅延解決リソースプロキシを取得し、メソッド呼び出しが入るとオンデマンドで getResource(org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.LookupElement, java.lang.String) に委譲します。 |
protected java.lang.Object | getResource(CommonAnnotationBeanPostProcessor.LookupElement element, java.lang.String requestingBeanName) 指定された名前と型のリソースオブジェクトを取得します。 |
void | ignoreResourceType(java.lang.String resourceType) @Resource アノテーションを解決するときに、指定されたリソース型を無視します。 |
boolean | postProcessAfterInstantiation(java.lang.Object bean, java.lang.String beanName) コンストラクターまたはファクトリメソッドを介して Bean がインスタンス化された後、Spring プロパティの設定(明示的なプロパティまたはオートワイヤーから)が発生する前に操作を実行します。 |
java.lang.Object | postProcessBeforeInstantiation(java.lang.Class<?> beanClass, java.lang.String beanName) ターゲット Bean がインスタンス化される前に、この BeanPostProcessor を適用します。 |
void | postProcessMergedBeanDefinition(RootBeanDefinition beanDefinition, java.lang.Class<?> beanType, java.lang.String beanName) 指定された Bean の指定されたマージ済み Bean 定義を後処理します。 |
PropertyValues | postProcessProperties(PropertyValues pvs, java.lang.Object bean, java.lang.String beanName) ファクトリが特定の Bean に適用する前に、特定のプロパティ値を後処理します。プロパティ記述子は必要ありません。 |
PropertyValues | postProcessPropertyValues(PropertyValues pvs, java.beans.PropertyDescriptor[] pds, java.lang.Object bean, java.lang.String beanName) 使用すべきではありません。 |
void | resetBeanDefinition(java.lang.String beanName) 指定された名前の Bean 定義がリセットされ、このポストプロセッサーが影響を受ける Bean のメタデータをクリアする必要があるという通知。 |
void | setAlwaysUseJndiLookup(boolean alwaysUseJndiLookup) name 属性とデフォルト名であっても、標準の Java EE 5 リソースインジェクションと同等の JNDI ルックアップを常に使用するかどうかを設定します。 |
void | setBeanFactory(BeanFactory beanFactory) 所有ファクトリを Bean インスタンスに提供するコールバック。 |
void | setFallbackToDefaultTypeMatch(boolean fallbackToDefaultTypeMatch) 明示的な名前が指定されていない場合、型の一致へのフォールバックを許可するかどうかを設定します。 |
void | setJndiFactory(BeanFactory jndiFactory) JNDI を直接指す mappedName 属性の場合、@Resource / @WebServiceRef / @EJB アノテーション付きフィールドおよび setter メソッドに挿入されるオブジェクトのファクトリを指定します。 |
void | setResourceFactory(BeanFactory resourceFactory) name 属性とデフォルト名について、@Resource / @WebServiceRef / @EJB アノテーション付きフィールドと setter メソッドに挿入されるオブジェクトのファクトリを指定します。 |
getOrder, postProcessAfterInitialization, postProcessBeforeDestruction, postProcessBeforeInitialization, requiresDestruction, setDestroyAnnotationType, setInitAnnotationType, setOrder
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
postProcessAfterInitialization, postProcessBeforeInitialization
public CommonAnnotationBeanPostProcessor()
PostConstruct
EE および PreDestroy
EE に設定して、新しい CommonAnnotationBeanPostProcessor を作成します。public void ignoreResourceType(java.lang.String resourceType)
@Resource
アノテーションを解決するときに、指定されたリソース型を無視します。javax.xml.ws.WebServiceContext
インターフェースは JAX-WS ランタイムによって解決されるため、デフォルトでは無視されます。
resourceType
- 無視するリソース型 public void setFallbackToDefaultTypeMatch(boolean fallbackToDefaultTypeMatch)
デフォルトは "true" です。すべてのケースで名前によるルックアップを適用するには、このフラグを "false" に切り替え、名前が一致しない場合は例外をスローします。
public void setAlwaysUseJndiLookup(boolean alwaysUseJndiLookup)
name
属性とデフォルト名であっても、標準の Java EE 5 リソースインジェクションと同等の JNDI ルックアップを常に使用するかどうかを設定します。 デフォルトは「false」: リソース名は、含まれている BeanFactory の Spring Bean ルックアップに使用されます。mappedName
属性のみが直接 JNDI を指します。name
属性とデフォルト名であっても、Java EE スタイルの JNDI ルックアップを強制するには、このフラグを "true" に切り替えます。
public void setJndiFactory(BeanFactory jndiFactory)
mappedName
属性に対して、 @Resource
/ @WebServiceRef
/ @EJB
アノテーション付きフィールドと setter メソッドに挿入されるオブジェクトのファクトリを指定します。このファクトリは、name
属性とデフォルト名に対しても JNDI 検索を強制するために、"alwaysUseJndiLookup" が "true" に設定されている場合にも使用されます。 デフォルトは、標準の Java EE 5 リソースインジェクションと同等の JNDI ルックアップ動作の SimpleJndiBeanFactory
です。
public void setResourceFactory(BeanFactory resourceFactory)
name
属性とデフォルト名について、@Resource
/ @WebServiceRef
/ @EJB
アノテーション付きフィールドと setter メソッドに挿入されるオブジェクトのファクトリを指定します。デフォルトは、このポストプロセッサーが定義されている BeanFactory であり、リソース名を Spring Bean 名として検索します。このポストプロセッサーをプログラムで使用するには、リソースファクトリを明示的に指定します。
Spring の SimpleJndiBeanFactory
を指定すると、name
属性とデフォルト名の場合でも、標準の Java EE 5 リソースインジェクションと同等の JNDI 検索動作が実行されます。これは、"alwaysUseJndiLookup" フラグが有効にする動作と同じです。
public void setBeanFactory(BeanFactory beanFactory)
BeanFactoryAware
通常の Bean プロパティの設定後、ただし InitializingBean.afterPropertiesSet()
またはカスタム init-method などの初期化コールバックの前に呼び出されます。
BeanFactoryAware
の setBeanFactory
beanFactory
- 所有 BeanFactory(非 null
)。Bean は、ファクトリのメソッドをすぐに呼び出すことができます。BeanInitializationException
public void postProcessMergedBeanDefinition(RootBeanDefinition beanDefinition, java.lang.Class<?> beanType, java.lang.String beanName)
MergedBeanDefinitionPostProcessor
MergedBeanDefinitionPostProcessor
の postProcessMergedBeanDefinition
InitDestroyAnnotationBeanPostProcessor
の 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(java.lang.String beanName)
MergedBeanDefinitionPostProcessor
デフォルトの実装は空です。
MergedBeanDefinitionPostProcessor
の resetBeanDefinition
beanName
- Bean の名前 DefaultListableBeanFactory.resetBeanDefinition(java.lang.String)
public java.lang.Object postProcessBeforeInstantiation(java.lang.Class<?> beanClass, java.lang.String beanName)
InstantiationAwareBeanPostProcessor
このメソッドによって null 以外のオブジェクトが返された場合、Bean 作成プロセスは短絡されます。適用される追加の処理は、構成された BeanPostProcessors
からの BeanPostProcessor.postProcessAfterInitialization(java.lang.Object, java.lang.String)
コールバックのみです。
このコールバックは、Bean クラスを持つ Bean 定義にのみ適用されます。特に、ファクトリメソッドの Bean には適用されません。
ポストプロセッサーは、ここで返される Bean オブジェクトの型を予測するために、拡張 SmartInstantiationAwareBeanPostProcessor
インターフェースを実装できます。
デフォルトの実装は null
を返します。
InstantiationAwareBeanPostProcessor
の postProcessBeforeInstantiation
beanClass
- インスタンス化される Bean のクラス beanName
- Bean の名前 null
InstantiationAwareBeanPostProcessor.postProcessAfterInstantiation(java.lang.Object, java.lang.String)
, AbstractBeanDefinition.hasBeanClass()
public boolean postProcessAfterInstantiation(java.lang.Object bean, java.lang.String beanName)
InstantiationAwareBeanPostProcessor
これは、Spring のオートワイヤーが開始される直前の、指定された Bean インスタンスでカスタムフィールドインジェクションを実行するための理想的なコールバックです。
デフォルトの実装は true
を返します。
InstantiationAwareBeanPostProcessor
の postProcessAfterInstantiation
bean
- プロパティがまだ設定されていない状態で作成された Bean インスタンス beanName
- Bean の名前 true
。プロパティの入力をスキップする必要がある場合は false
。通常の実装では true
を返します。false
を返すと、後続の InstantiationAwareBeanPostProcessor インスタンスがこの Bean インスタンスで呼び出されなくなります。InstantiationAwareBeanPostProcessor.postProcessBeforeInstantiation(java.lang.Class<?>, java.lang.String)
public PropertyValues postProcessProperties(PropertyValues pvs, java.lang.Object bean, java.lang.String 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)
@Deprecated public PropertyValues postProcessPropertyValues(PropertyValues pvs, java.beans.PropertyDescriptor[] pds, java.lang.Object bean, java.lang.String 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 java.lang.Object buildLazyResourceProxy(CommonAnnotationBeanPostProcessor.LookupElement element, @Nullable java.lang.String requestingBeanName)
getResource(org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.LookupElement, java.lang.String)
に委譲します。element
- アノテーション付きフィールド / メソッドの記述子 requestingBeanName
- リクエストしている Bean の名前 null
)getResource(org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.LookupElement, java.lang.String)
, Lazy
protected java.lang.Object getResource(CommonAnnotationBeanPostProcessor.LookupElement element, @Nullable java.lang.String requestingBeanName) throws NoSuchBeanDefinitionException
element
- アノテーション付きフィールド / メソッドの記述子 requestingBeanName
- リクエストしている Bean の名前 null
)NoSuchBeanDefinitionException
- 対応するターゲットリソースが見つからない場合 protected java.lang.Object autowireResource(BeanFactory factory, CommonAnnotationBeanPostProcessor.LookupElement element, @Nullable java.lang.String requestingBeanName) throws NoSuchBeanDefinitionException
factory
- オートワイヤーするファクトリ element
- アノテーション付きフィールド / メソッドの記述子 requestingBeanName
- リクエストしている Bean の名前 null
)NoSuchBeanDefinitionException
- 対応するターゲットリソースが見つからない場合