Springboot2 の新しいアノテーション属性 proxyBeanMethods。デフォルトは true です。
外側の false は次のように変更できます。
@Configuration(proxyBeanMethods = false)
この属性は、おおまかに次のことを意味します。
proxyBeanMethods は、true の場合はこの構成クラスがプロキシされ、false の場合はプロキシされないことを意味します。
実際のアプリケーションでの使用は、主にパフォーマンスのためです。
プロキシ オブジェクトを使用してそのメソッドを呼び出すと、コンテナ内にそのようなコンポーネントがあるかどうかが検出されます. 存在する場合は、新しいコンポーネントを作成せず、既存のコンポーネントを直接返します.
そうでない場合は、新しいコンポーネントが作成されます。これにより、コンテナ内のコンポーネントが常に単一に保たれます。ただし、これには欠点もあります。つまり、毎回検出する必要があり、速度が遅くなります。
Spring のプロキシ メカニズムの説明:
- 主なコンセプト:
CGLIB:
CGLIB (コード生成ライブラリ) は ASM ベースのバイトコード生成ライブラリで、実行時にバイトコードを変更して動的に生成することができます。CGLIB implements proxies through inheritance; it can extend Java classes and implement Java interfaces at runtime.
SpringBoot 2.x 以降、CGLIB は、JDK 動的プロキシの使用によって引き起こされる可能性のある型変換例外を解決するために使用されます。JDK 動的プロキシを置き換える必要がある場合は、構成項目 spring.aop.proxy-target-class=false を使用して変更できます。proxyTargetClass 構成は無効です。