隨筆 - 8, 文章 - 0, 評論 - 4, 引用 - 0
          數據加載中……

          2009年2月11日

          Java靜態代理和動態代理

          網上和bolg上相關例子不少,今天自己動手寫了個例子作為學習筆記。
          首先java代理分為靜態代理和動態代理,動態代理中java提供的動態代理需要動態代理一個inteface,如果沒有inteface則需要使用實現cglib提供的接口。
          下面例子只實現動態代理
          public class MyProxy implements InvocationHandler{
              
              
          static Object proxyObj = null;    
              
              
          public static Object getInstance(Object obj){
                  proxyObj
          = obj;
                  
          return Proxy.newProxyInstance(obj.getClass().getClassLoader(), obj.getClass().getInterfaces(), new MyProxy());
              }

              
              
          public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                  System.out.println(
          "使用代理..");
                  
          return method.invoke(proxyObj, args);
              }

          }

          實現方式
          public static void main(String[] args) {
                  ILeaveService service 
          = (ILeaveService)MyProxy.getInstance(new LeaveServiceImpl());
                  
          try {
                      service.listBizObjByHql(
          "");
                  }

                  
          catch (ServiceException e) {
                      e.printStackTrace();
                  }

              }

          打印出:
          使用代理..
          query Hql..
          使用Cglib
          public class Test2 implements MethodInterceptor {
                  
              
              
          public Object intercept(Object obj, Method method, Object[] args, MethodProxy methodProxy) throws Throwable {
                  System.out.println(
          "cglib proxy");
                  
          return methodProxy.invokeSuper(obj, args);
              }

              
          }

          實現
          public static void main(String[] args) {
                  Enhancer enhancer 
          = new  Enhancer();
                  enhancer.setSuperclass(Test3.class);
                  enhancer.setCallback(new Test2());        

                  Test3 test 
          = (Test3)enhancer.create();
                  test.prinInfo(
          "p.");
              }
          輸出
          cglib proxy
          p.
          過濾器
          public class Test4 implements CallbackFilter{

              
          public int accept(Method method) {
                  
          if(method.getName().equals("method1")){
                      
          return 1;
                  }
          else if(method.getName().equals("method2")){
                      
          return 0;
                  }

                  
          return 0;
              }

              
          }
          只有返回0的才執行(cglib中的NoOp.INSTANCE就是一個空的攔截器
              public static void main(String[] args) {        
                  Callback [] callbacks 
          = new Callback[]{new Test2(),NoOp.INSTANCE};
                  Enhancer enhancer 
          = new Enhancer();
                  enhancer.setSuperclass(Test3.
          class);
                  enhancer.setCallbacks(callbacks);
                  enhancer.setCallbackFilter(
          new Test4());
                  Test3 test3 
          = (Test3)enhancer.create();
                  test3.method1();
                  test3.method2();
              }

              
          }

          執行結果
          method1
          cglib proxy
          method2

          posted @ 2009-02-18 16:52 Pitey 閱讀(496) | 評論 (0)編輯 收藏

          轉:Message Driven POJO

          作者:江南白衣 
            
              一直希望那些J字頭的協議能有幾個提前告老還鄉的,好減輕一下我們的負擔,特別是這WebService滿天飛的時代。但似乎還有很久都輪不到JMS的消失:

              1.因為
              1.它是《Effective Enterprise Java》的一個實踐。 
              可以把不影響用戶執行結果又比較耗時的任務(比如發郵件通知管理員)異步的扔給JMS 服務端去做,而盡快的把屏幕返還給用戶。
              而且服務端能夠多線程排隊響應--高并發的請求。

              2. 可以在Java世界里達到最高的解耦。
                 對比WebService,JMS的客戶端與服務端無需直連,甚至無需知曉對方是誰、在哪里、有多少人,只要對流過的信息作響應就行了。對牽一發動全身的企業應用來說很輕省。
                 
               2. 但是
               1. Message Bean帶著EJB系的榮光,步驟比較繁雜,你需要實現MessageDrivenBean、MessageListener接口,還需要設置EJB的配置信息,然后是deploy....

               2. Spring 1.x 提供的JMS Template簡化了JMS Client端的編程,但并沒有涉及到服務端的改造。

               3. 所以,SpringSide的Message Driven POJO方案

                Spring JMS Template + ActiveMQ + Jencks

          1. 它是Lightweight的,基本上只是普通POJO,不用搞太多東西。

          2. 它是Spring Base的,可以使用Spring的各種特性如IOC、AOP。

          3. 它是Effective的,基于Jencks的JCA Container實現 pool connection,control transactions and manage security。

          4. 但它是withdout EJB Container的。

          其實它還不是100% POJO,除非再用上Lingo,但我已不想走得太遠。

          4.黃金版配置
                如果你想找一個ActiveMQ 3.2 Stable版+Spring的100%可行的配置文件,估計只能到SpringSide項目里看了。網上的文章,不是已過時,就是不切題。

               推薦中英兩份最接近的文檔:
               捷特慈朋(IDEA中國): Spring和Message Bean的整合
               Spring loaded:  Message-Driven POJOs 

               不過它們都有個outdate的地方--ActiveMQ3.2開始不再自帶JCA Cotainer了,而是將其與Gernimo 合作而成了Jencks,需另外安裝。

           5.SpringSide旅游指南

                pom.xml里的JMS部分 --所需的依賴包。
                applicationContext-jms.xml --黃金版配置文件。
                activemq.xml  --AcitveMQ Broker配置文件。
                OrderPlaceMDP.java --Message Driven Pojo。
                JmsTest.java --單元測試用例。
                OrderManger.java的NodifyOrder()函數 --實際應用的地方。 

           POJO太簡單,唯一麻煩的配置文件已注釋,這里也就無話了。

          posted @ 2009-02-11 09:52 Pitey 閱讀(260) | 評論 (0)編輯 收藏

          [導入]一次Java垃圾收集調優實戰

               摘要: GC調優是個很實驗很伽利略的活兒,最后服務的處理速度從1180 tps 上升到1380 tps,調整兩個參數提升17%的性能還是筆很劃算的買賣.....  閱讀全文

          江南白衣 2008-07-09 10:13 發表評論

          文章來源:http://www.aygfsteel.com/calvin/archive/2008/07/09/213535.html

          posted @ 2009-02-11 09:17 Pitey 閱讀(171) | 評論 (0)編輯 收藏

          主站蜘蛛池模板: 泗阳县| 东乡县| 奉节县| 宝丰县| 通城县| 文化| 扶沟县| 香格里拉县| 安丘市| 松滋市| 广饶县| 竹溪县| 卢氏县| 四会市| 丰城市| 襄垣县| 陇西县| 郁南县| 杨浦区| 孟连| 吉安县| 阳高县| 田东县| 阜平县| 五华县| 泽普县| 金溪县| 南溪县| 扎赉特旗| 宜良县| 中西区| 额尔古纳市| 赞皇县| 抚松县| 武汉市| 宣恩县| 邓州市| 茌平县| 双峰县| 林州市| 上虞市|