1.プロキシモード
基本的な導入プロキシモード
- プロキシモード:このオブジェクトへのアクセスを制御するためのオブジェクトの代替を提供します。そうすることの代理オブジェクトの利点を介してターゲットによってアクセスされていることです:ターゲットオブジェクトに基づいて、対象オブジェクトの機能の拡張の動作を強化するための追加機能で達成することができます。
- プロキシオブジェクトは、大きなオーバーヘッドつまたは複数のオブジェクトに必要なセキュリティコントロールを作成、リモートオブジェクトであってもよいです
- プロキシモードの異なる形式があり、3つがあり
静态代理
、动态代理 (JDK代理、接口代理)
そしてCglib
エージェントは(あなたがインターフェイスを実装することなく、動的メモリ内のオブジェクトを作成することができ、彼は、動的プロキシのカテゴリに属します)。
1.1シーン
- インターフェイスを定義します。ITeacherDaoを
- ターゲット・オブジェクトが実装インタフェースTeacherDAO ITeacherDAO
- 静的プロキシモードを使用して、あなたはまた、プロキシオブジェクトTeacherDAOProxyにITeacherDAOを実現する必要があります
- コールは、プロキシオブジェクトのメソッド呼び出しを介してターゲットオブジェクトを呼び出すとき。
- 特記事項:プロキシオブジェクトとターゲットオブジェクトと同じインタフェースを実装し、その後方法と同様の方法を呼び出すことにより、ターゲットオブジェクトを呼び出します
1.2静的プロキシ
静的剤、インタフェースまたはスーパークラスを定義する必要があり、代理オブジェクト(すなわち、ターゲットオブジェクト)と同じインターフェイスプロキシオブジェクトは、同一または親とを継承実装を使用する場合
静的エージェントの長所と短所
- 利点:ターゲットオブジェクトに変更せずに関数、ターゲット関数の拡張を介してプロキシオブジェクト
- 短所:プロキシオブジェクトが同じインターフェイスを実現するために目標とする必要があるため、非常に多くのプロキシクラスが存在します
- ターゲット・オブジェクトとプロキシオブジェクトを増大させるためのインタフェース方法が維持されなければならない後
1.3ダイナミックプロキシ
動的プロキシモードの基本的な導入
- プロキシオブジェクトは、インタフェースを実装する必要はありませんが、ターゲットオブジェクトは、インターフェイスを実装するために、または動的プロキシを使用することはできません
- プロキシオブジェクト、APIを使用して、JDK、メモリに構築動的プロキシオブジェクトを生成します
- JDKエージェント、インタフェースエージェント:としても知られているダイナミックエージェント
JDKのAPIのプロキシオブジェクトの生成
- 演技のクラスどこパッケージ:java.lang.reflect.Proxyの
- JDK实现代理只需要使用newProxyInstance方法,但是该方法需要接收三个参数,完整的写法是:static Object newProxyInstance(ClassLoader loader, Class<?>[] interfaces,InvocationHandler h )
主要参考代码:
1.4 Cglib代理
Cglib代理模式的基本介绍
- 静态代理和 JDK代理模式都要求目标对象是实现一个接口,但是有时候目标对象只是一个单独的对象,并没有实现任何的接口,这个时候可使用目标对象子类来实现代理-这就是Cglib 代理
- Cglib代理也叫作子类代理,它是在内存中构建一个子类对象从而实现对目标对象功能扩展, 有些书也将Cglib代理归属到动态代理。
- Cglib 是一个强大的高性能的代码生成包,它可以在运行期扩展 java类与实现 java 接口.它广泛的被许多 AOP 的框架使用,例如 SpringAOP,实现方法拦截
- 在 AOP 编程中如何选择代理模式:
a. 目标对象需要实现接口,用 JDK代理
b. 目标对象不需要实现接口,用 Cglib 代理 - Cglib包的底层是通过使用字节码处理框架 ASM 来转换字节码并生成新的类
Cglib代理模式实现步骤
1.5 几种常见的代理模式介绍— 几种变体
- 防火墙代理
内网通过代理穿透防火墙,实现对公网的访问。 - 缓存代理
比如:当请求图片文件等资源时,先到缓存代理取,如果取到资源则 ok,如果取不到资源,再到公网或者数据库取,然后缓存。 - 远程代理
远程对象的本地代表,通过它可以把远程对象当本地对象来调用。远程代理通过网络和真正的远程对象沟通信息。 - 同期エージェント:主にマルチスレッド・プログラミングとの間の完全なマルチスレッドの同期に使用される
主にマルチスレッドプログラミングで使用される、複数のスレッド間で完全な同期:同期プロキシ