posts - 51, comments - 17, trackbacks - 0, articles - 9
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          java模式之動態代理

          Posted on 2007-01-05 20:47 chenweicai 閱讀(393) 評論(1)  編輯  收藏

          package proxy;
          /**
          ?*
          ?* @author chen
          ?*
          ?*/
          public interface Subject {
          ?abstract public void request();
          ?abstract public void request2();
          }


          package proxy;

          /**
          ?*
          ?* @author chen
          ?*
          ?*/
          public class RealSubject implements Subject {
          ?
          ?public RealSubject(){
          ?}

          ?public void request() {
          ??// TODO Auto-generated method stub
          ??System.out.println("From real subject.request().");
          ?}
          ?
          ?public void request2() {
          ??// TODO Auto-generated method stub
          ??System.out.println("From real subject.request2()");
          ?}
          }

          package proxy;


          import java.lang.reflect.InvocationHandler;
          import java.lang.reflect.Method;

          /**
          ?*
          ?* @author chenweicai
          ?*
          ?*/
          public class DynamicSubject implements InvocationHandler {
          ?
          ?private Object sub;
          ?
          ?public DynamicSubject(){
          ?}
          ?
          ?public DynamicSubject(Object obj){
          ??this.sub = obj;
          ?}

          ?public Object invoke(Object proxy, Method method, Object[] args)
          ???throws Throwable {
          ??// TODO Auto-generated method stub
          ???? System.out.println("before calling " + method);
          ???? method.invoke(sub,args);
          ???? System.out.println("after calling " + method);
          ??return null;
          ?}

          }


          package proxy;

          import java.lang.reflect.InvocationHandler;
          import java.lang.reflect.Method;
          import java.lang.reflect.Constructor;
          import java.lang.reflect.Proxy;

          /**
          ?*
          ?* @author chen
          ?*
          ?*/
          public class Client {
          ?static public void main(String[] args)
          ??????? throws Throwable{
          ??? RealSubject rs = new RealSubject();? //在這里指定被代理類
          ??? InvocationHandler ds = new DynamicSubject(rs);? //初始化代理類
          ??? Class cls = rs.getClass();
          ??
          ??? //以下是分解步驟
          ??? /*Class c = Proxy.getProxyClass(cls.getClassLoader(),cls.getInterfaces()) ;
          ??? Constructor ct=c.getConstructor(new Class[]{InvocationHandler.class});
          ??? Subject subject =(Subject) ct.newInstance(new Object[]{ds});*/
          ??
          ??? //以下是一次性生成
          ??? Subject subject = (Subject) Proxy.newProxyInstance(cls.getClassLoader(),
          ??? cls.getInterfaces(),ds );

          ??? subject.request2();
          ?? }
          }


          評論

          # re: java模式之動態代理  回復  更多評論   

          2007-01-05 22:50 by xzcqwer
          這是在講述springframework中ProxyFactoryBean的實現機理吧,呵呵

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 墨脱县| 淮南市| 象州县| 东台市| 新兴县| 师宗县| 黔西县| 江川县| 宜宾县| 琼结县| 茌平县| 睢宁县| 长阳| 巴中市| 托克托县| 吴旗县| 从化市| 新建县| 治多县| 平邑县| 隆德县| 崇阳县| 都兰县| 遂平县| 荔浦县| 江川县| 山丹县| 达日县| 吉木乃县| 四子王旗| 黄平县| 福贡县| 会东县| 南岸区| 怀化市| 当涂县| 石楼县| 巧家县| 松滋市| 宁波市| 本溪市|