public final class CachedIntrospectionResults extends ObjectSE
PropertyDescriptorSE 情報をキャッシュする内部クラス。アプリケーションコードで直接使用するためのものではありません。JZ のシステム全体の BeanInfoSE キャッシュに依存するのではなく、アプリケーション ClassLoaderSE 内の Spring 独自の Bean 記述子のキャッシュに必要です(共有 JVM での個々のアプリケーションシャットダウンでのリークを回避するため)。
情報は静的にキャッシュされるため、操作する JavaBean ごとにこのクラスの新しいオブジェクトを作成する必要はありません。このクラスは、プライベートコンストラクターと静的 forClass(Class) ファクトリメソッドを使用してインスタンスを取得し、ファクトリデザインパターンを実装します。
キャッシュが効果的に機能するためには、いくつかの前提条件を満たす必要があることに注意してください。Spring jar がアプリケーションクラスと同じ ClassLoader に存在する配置を優先してください。これにより、アプリケーションのライフサイクルとともにクリーンなキャッシュが可能になります。Web アプリケーションの場合、マルチ ClassLoader レイアウトの場合、ローカル IntrospectorCleanupListener を web.xml で宣言することを検討してください。これにより、効果的なキャッシュも可能になります。
クリーンアップリスナーが設定されていないクリーンでない ClassLoader 配置の場合、このクラスは、ガベージコレクターが削除するたびに、リクエストの多いエントリを再作成する弱参照ベースのキャッシュモデルにフォールバックします。このようなシナリオでは、IGNORE_BEANINFO_PROPERTY_NAME システムプロパティを検討してください。
acceptClassLoader(ClassLoader), clearClassLoader(ClassLoader), forClass(Class)| 修飾子と型 | フィールドと説明 |
|---|---|
static StringSE | IGNORE_BEANINFO_PROPERTY_NAMEJavaBeans を呼び出すときに Spring に Introspector.IGNORE_ALL_BEANINFOSE モードを使用するように指示するシステムプロパティ IntrospectorSE:"spring.beaninfo.ignore"。値が "true" の場合、BeanInfo クラスの検索をスキップします(通常、最初のアプリケーションでそのようなクラスが Bean に対して定義されていないシナリオの場合)。場所)。 |
| 修飾子と型 | メソッドと説明 |
|---|---|
static void | acceptClassLoader(ClassLoaderSE classLoader) クラスがこの CachedIntrospectionResults クラスでキャッシュセーフとして認定されない場合でも、指定された ClassLoader をキャッシュセーフとして受け入れます。 |
static void | clearClassLoader(ClassLoaderSE classLoader) 指定された ClassLoader のイントロスペクションキャッシュをクリアし、その ClassLoader にあるすべてのクラスのイントロスペクション結果を削除し、受け入れリストから ClassLoader(およびその子)を削除します。 |
cloneSE, equalsSE, finalizeSE, getClassSE, hashCodeSE, notifySE, notifyAllSE, toStringSE, waitSE, waitSE, waitSEpublic static final StringSE IGNORE_BEANINFO_PROPERTY_NAME
Introspector.IGNORE_ALL_BEANINFOSE モードを使用するように指示するシステムプロパティ IntrospectorSE:"spring.beaninfo.ignore"。値が "true" の場合、BeanInfo クラスの検索をスキップします(通常、最初のアプリケーションでそのようなクラスが Bean に対して定義されていないシナリオの場合)。場所)。 標準の Introspector.getBeanInfo(Class)SE 呼び出しの場合と同様に、すべての BeanInfo メタデータクラスを考慮して、デフォルトは "false" です。起動時や遅延読み込みでこのようなアクセスに負荷がかかる場合に備えて、存在しない BeanInfo クラスに対する ClassLoader アクセスが繰り返される場合は、このフラグを "true" に切り替えることを検討してください。
このような影響は、キャッシュが効果的に機能しないシナリオを示している可能性があることに注意してください。Spring jar がアプリケーションクラスと同じ ClassLoader に存在する配置を優先してください。これにより、アプリケーションのライフサイクルとともにクリーンなキャッシュが可能になります。Web アプリケーションの場合、マルチ ClassLoader レイアウトの場合、ローカル IntrospectorCleanupListener を web.xml で宣言することを検討してください。これにより、効果的なキャッシュも可能になります。
public static void acceptClassLoader(@Nullable ClassLoaderSE classLoader)
この構成方法は、Spring クラスが「共通の」ClassLoader(システム ClassLoader など)に存在し、そのライフサイクルがアプリケーションに結合されていないシナリオにのみ関連します。このようなシナリオでは、CachedIntrospectionResults はデフォルトでアプリケーションのクラスをキャッシュしません。これは、CachedIntrospectionResults が共通の ClassLoader でリークを作成するためです。
アプリケーションの起動時の acceptClassLoader 呼び出しは、アプリケーションのシャットダウン時の clearClassLoader(java.lang.ClassLoader) 呼び出しとペアにする必要があります。
classLoader - 受け入れる ClassLoaderpublic static void clearClassLoader(@Nullable ClassLoaderSE classLoader)
classLoader - キャッシュをクリアする ClassLoader