1つのソースの決意
(アプリケーションJDKで)1.1ソース解像度1
1.2分析源2(Springアプリケーションにおける)
(アプリケーションmybatiesで)1.3ソース解像度3
1つのソースの決意
(アプリケーションJDKで)1.1ソース解像度1
java.lang.reflect.Proxyの
パブリック クラスプロキシ実装はjava.io.Serializableの{ 保護(のInvocationHandler Hの)プロキシ{ ; doNewInstanceCheck() この .H = H; } //新しいインスタンスを作成し(視聴者)
パブリック 静的オブジェクトのnewProxyInstance(クラスローダローダ、 クラス <?> []インターフェイス、 のInvocationHandler Hの)は スローはIllegalArgumentException { IF(H == NULL ){ スロー 新しい新しいNullPointerExceptionが(); } 最終の <?>クラス[] intfs = interfaces.clone()。 最終的なセキュリティマネージャSM = System.getSecurityManager()。 もし(!SM = NULL ){ checkProxyAccess(Reflection.getCallerClass()、ローダ、intfs)。 } / * *見上げまたは指定されたプロキシクラスを生成します。 * / クラス CL = <?> getProxyClass0(ローダー、intfs)。 / * *指定された呼び出しハンドラとそのコンストラクタを呼び出します。 * / トライ{ 最終コンストラクタ短所= <?> cl.getConstructor(constructorParams)。 最終のInvocationHandler IH = H; もし(SM!= nullの && ProxyAccessHelper.needsNewInstanceCheck(CL)){ // プロキシクラスとしてdoPrivilegeとプロキシインスタンスを作成することも //は、特別な許可が必要です非パブリックインターフェイスを実装する リターン AccessController.doPrivilegedの(新たPrivilegedAction <オブジェクト> ( ){ 公共オブジェクトラン(){ 戻りのnewInstanceを(短所、1H); } })。 } 他{ 返すのnewInstance(短所、IH)を、 } } キャッチ(ないNoSuchMethodException電子){ スロー 新しいInternalError(e.toStringを())。 } } }
1.2分析源2(Springアプリケーションにおける)
ProxyFactoryBean
パブリック クラス ProxyFactoryBeanは延び ProxyCreatorSupport 実装 FactoryBeanの<OBJECT> 、BeanClassLoaderAware、BeanFactoryAware {
オブジェクトの場合は、宣言//ない場合宣言、デフォルトのシングルトンオブジェクトを、複数の注釈は、実施の形態を宣言し、
公共のgetObject()は、オブジェクトを投げるBeansException { この.initializeAdvisorChainを(); IF(この.isSingleton()) { 戻り 、この.getSingletonInstanceを(); } {他の IF(この .targetNameは== NULL ){ この.logger.warn(「シングルトンターゲットと非シングルトンプロキシを使用すると、多くの場合、望ましくない『ターゲット名』プロパティを設定することにより、プロトタイプのプロキシを有効にします。。」); } 戻り 、この)(.newPrototypeInstanceします。 } } }
(アプリケーションmybatiesで)1.3ソース解像度3
MapperProxyFactory
パブリック クラス MapperProxyFactory <T> { パブリックTのnewInstance(SQLSESSION SQLSESSION){ MapperProxy <T> mapperProxy = 新しい MapperProxy(SQLSESSION、この .mapperInterface、この.methodCache)。 戻る この.newInstance(mapperProxyを)。 } }