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