簡潔カリキュラムデザインパターンデザインパターン16-2プロキシモードCoding-静的プロキシ-1

1コードのチュートリアル

1.1コードドリル1(サブライブラリーの静的プロキシ動作)

 

 

1コードのチュートリアル
1.1コードドリル1(サブライブラリーの静的プロキシ動作)

要件:

注文管理、シミュレーション前後の方法のシミュレートするために、サブライブラリーの管理を

 

キー:

参照キー注文静的剤、動的データ・ソースとサブライブラリー操作コンテキスト。

 

UMLのクラス図:

受注カテゴリ:

以下のためのパッケージ変更com.geely.design.pattern.structural.proxy; 

/ ** 
 *作成Orderエンティティクラス
 * / 
パブリック クラスの注文{
     プライベートオブジェクトORDERINFO;
     // 選択した整数型の、静的プロキシクラス除算ライブラリOrderServiceStaticProxy容易にするために
    プライベートをユーザID整数; 

    公共オブジェクトgetOrderInfo(){
         戻りORDERINFOを; 
    } 

    公共 ボイドsetOrderInfo(ORDERINFOオブジェクト){
         この .orderInfoは= ORDERINFOを; 
    } 

    パブリック整数getUserId(){
         戻りユーザーIDを; 
    } 

    公共 ボイドsetUserID(整数USERID){
         この .userID = ユーザーID。
    } 
}

 

注文DAO:

パッケージcom.geely.design.pattern.structural.proxy。

パブリック インターフェースIOrderDao {
     INT insertOrder(オーダー順序); 
}

 

注文daoIMPL:

パッケージcom.geely.design.pattern.structural.proxy。

パブリック クラス OrderDaoImplは実装IOrderDao { 
    @Override 
    公共 int型insertOrder(受注オーダー){ 
        System.out.printlnは( "!新增一条订单を" );
        リターン 1 ; 
    } 
}

 

オーダーサービス:

パッケージcom.geely.design.pattern.structural.proxy。

パブリック インターフェースIOrderService {
     INT saveOrder(オーダー順序); 
}

 

受注ServiceIMPL:

以下のためのパッケージ変更com.geely.design.pattern.structural.proxy; 

パブリック クラス OrderServiceImpl 実装IOrderService {
     プライベートIOrderDao OrderDao; 

    @Override 
    公共の int型のsaveOrder(受注発注){
         // 春には、我々は新しいダイレクトここで、自分自身を注入します 
        OrderDao = 新しいOrderDaoImplを( ); 
        System.out.printlnは( "アドオンサービスを層のDAO層は、注文を呼び出す" );
         を返すorderDao.insertOrder(受注); 
    } 
}

 

受注静的プロキシ:

パッケージcom.geely.design.pattern.structural.proxy.staticProxy; 

インポートcom.geely.design.pattern.structural.proxy.IOrderService;
 インポートcom.geely.design.pattern.structural.proxy.Order;
 インポートcom.geely。 design.pattern.structural.proxy.OrderServiceImpl; 

パブリック クラスOrderServiceStaticProxy {
     プライベートIOrderService OrderServiceの; 

    / ** 
     *メソッドの前と後のメソッドを追加
     * @paramの注文
     * @return 
     * / 
    公共 int型saveOrder(受注発注){ 
        beforeMethodを() ; 
        // 春が注入され、そしてここで私はそれを新しい 
        OrderServiceの=新しい新しいOrderServiceImpl(); 

        / ** 
         方法に従って、サブライブラリーを追加するために、ここで*は、ユーザーを法、ライブラリはIの数に応じて分割される
         * / 
        int型のユーザID = order.getUserID();
         int型dbRouter%のユーザーID = 2 ; //実装してもよいサブライブラリー特定のシナリオでは、単純なアナログであることをここでは、同じではありません
        のSystem.out.println(「!データを処理するためのデータベース「[+ dbRouter + DB]」に割り当てられた帯電防止剤」); 
        afterMethod(); 
        を返す(注文をorderService.saveOrderを); 
    } 
    / ** 
     *この参照スプリングAOP練習、事前通知方法増加する
     * / 
    プライベート ボイドbeforeMethod(){ 
        System.out.printlnは( "メソッドの前に静的剤" ); 
    } 

    / ** 
     *この参照春AOPの実践、事後通知方法を増加させました
     * /
    プライベート ボイドafterMethod(){ 
        System.out.printlnは( "メソッドの後に静的剤" ); 
    } 
}

 

動的データソース:

パッケージcom.geely.design.pattern.structural.proxy.db; 

インポートorg.springframework.jdbc.datasource.lookup.AbstractRoutingDataSourceは、

/ ** 
 *サブライブラリーの操作:これらの動的なデータソースクラス
 * / 
パブリック クラスは DynamicDataSource 拡張AbstractRoutingDataSourceを{ 
    @Override 
    保護オブジェクトdetermineCurrentLookupKey(){
         戻りDataSourceContextHolder.getDBTypeを(); 
    } 
}

 

サブライブラリー業務コンテキスト:

パッケージcom.geely.design.pattern.structural.proxy.db; 

/ ** 
 *サブライブラリーの操作:
 * dbRouterコンテキストクラス、我々が設定されている場合、DAO層を実行する前に、setDBTypeはDB1へのdbTypeまたはDB0を提供し、それはDAO層これは、対応するデータベースに接続されます。
 * DB0と私たちのDB1のSpringコンテナが設定されているbeanId
  * / 
パブリック クラスDataSourceContextHolder {
     // この変数は、DataSource、のbeanName保存することができます
   =新しい新しいCONTEXT_HOLDERのThreadLocal <文字列>(プライベート静的最終のThreadLocal <文字列>を);公共の静的な無効setDBType(文字列dbType){ 
        CONTEXT_HOLDER.set(のdbType); 
    } パブリック静的ボイドclearDBType(文字列のdbType){ 
        CONTEXT_HOLDER.remove(); 
    } 

      

      

    パブリック 静的文字列getDBType(){
         リターン(文字列)CONTEXT_HOLDER.get(); 
    } 
}

 

おすすめ

転載: www.cnblogs.com/1446358788-qq/p/11531312.html