最近在学习Java5.0新特性!讲到代理,开始有点晕乎,经老师细心讲解,明白些许,在这里跟大家分享下。
  代理有静态代理动态代理。先说下静态代理!
   先申明一个接口,接着写个方法实现接口,最后写个代理类,同样实现接口。
  package com.reflexTest;
    
  /*模拟静态代理
    * */
    
    
    
  /*定义接口*/
    interface stu{
    void student();
    void student(String t);
  }
    
  /**被代理类--必须实现接口
    * */
public class reflexCount implements stu {
    
    public void student() {
      // TODO Auto-generated method stub
      System.out.println("我在学习");
    }
    
    public void student(String t) {
      // TODO Auto-generated method stub
      System.out.println("我在学习"+t);
    }
    //测试
    public static void main(String[] args) {
        
      handl p=new handl();//代理对象
      reflexCount obj= new reflexCount();//被代理对象
      p.setT(obj);
      //p.student("动态代理");//带参数
      p.student();
    }
  }
  /*代理类---必须实现接口**/
    class handl implements stu{
    stu t;//定义一个接口类型的对象。
            
    //给定Set方法--把被代理对象穿过来
    public void setT(stu t) {
      this.t = t;
    }
    
    public void student() {
      // TODO Auto-generated method stub
      System.out.println("我在学习之前吃饭!");
      this.t.student();
      System.out.println("我在学习之后洗澡!");
    }
    
    public void student(String t) {
      // TODO Auto-generated method stub
      System.out.println("我在学习之前吃饭!");
      this.t.student(t);
      System.out.println("我在学习之后洗澡!");
    }
    
  }    
先看下上面的代码……
  注意测试部分……
      你会发现,在测试部分没有直接调用被代理类(reflexCount),而是用代理类(handl)的方法(setT())把被代理的类传给代理类,然后通过代理类来调用被代理类的方法,从而实现了在被代理类的方法调用之前或之后做些其他事情。
 
弊端:静态代理的缺点,每个被代理的类都得写对应的代理方法。
解决:动态代理。
                且听下回分析……