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

          java模式之動態代理

          Posted on 2007-01-05 20:47 chenweicai 閱讀(394) 評論(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的實現機理吧,呵呵

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


          網站導航:
           
          主站蜘蛛池模板: 阳原县| 余江县| 三河市| 阜宁县| 汽车| 盐山县| 开封市| 卢龙县| 大邑县| 额济纳旗| 五指山市| 黄浦区| 休宁县| 扶绥县| 化德县| 丰城市| 绥滨县| 太和县| 白城市| 元朗区| 奈曼旗| 泰州市| 金堂县| 江阴市| 岑巩县| 黄冈市| 闸北区| 奉节县| 南皮县| 萍乡市| 磐石市| 龙州县| 融水| 双城市| 桃源县| 宜宾县| 堆龙德庆县| 玉林市| 余庆县| 基隆市| 和硕县|