JDK Dynamic Proxy, CGLIB
入る前に。
Proxy
ターゲット機能を実行するときに機能を拡張または追加する実際のオブジェクトを指します.
Spring AOP
SpringはProxyに基づいてAOP機能を提供します.
JDK Dynamic ProxyおよびCGIBはAOPを提供する.
JDK Dynamic Proxy Object proxy = Proxy.newProxyInstance(
ClassLoader,
Class<?>[],
InvocationHandler
);
Object proxy = Proxy.newProxyInstance(
ClassLoader,
Class<?>[],
InvocationHandler
);
Reflection
具体的なclass typeはわかりませんが、そのclassのmethod、type、変数の機能にアクセスできます.
classを動的にロードし、heapでオブジェクトを作成するプロセスはパフォーマンスのホットスポットのようです?!
CGLIB (Code Generator Library) Enhancer enhancer = new Enhancer();
enhancer.setSuperclass(Target.class);
enhancer.setCallback(MethodInterceptor);
Object proxy = enchancer.create(); // proxy 생성
Enhancer enhancer = new Enhancer();
enhancer.setSuperclass(Target.class);
enhancer.setCallback(MethodInterceptor);
Object proxy = enchancer.create(); // proxy 생성
Conclusion
以前。
Springは、Enhander 의존성 추가
、default 생성자 필요
およびtarget의 생성자 2번 호출
の欠点のため、CGIBの使用を推奨しない.
今。
Spring 3.2リリースから、Spring Coreパッケージはcglib가 포함
に達しました.
4リリースでは、Objectensisのヘルプでdefault 생성자 없이 proxy 생성
を使用できます.생성자가 2번 호출되는 단점도 개선
だそうです
結果
cglibの制約が改善され、Springでよりパフォーマンスの良いCGIB Proxyが作成されました.
References
Reflection
Reference
この問題について(JDK Dynamic Proxy, CGLIB), 我々は、より多くの情報をここで見つけました https://velog.io/@sixhustle/spring-aop-proxyテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol