JDK代理的小例子

1、首先新建接口

package relation;
/**
 * 接口类
 * @author Administrator
 *
 */
public interface Subject {
    
    /**
     * 购物
     * @param name
     */
    public void shoping(String name);
    
    /**
     * 睡觉
     */
    public void sleeping();
    
}

2.、要代理的实现类

package relation;

public class SuperMan implements Subject{

    @Override
    public void shoping(String name) {

    System.out.println(name + "在购物");    
    }

    @Override
    public void sleeping() {
        System.out.println("睡觉。。。");
    }

}

3、代理工厂

package relation;

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

//代理类
public class ProxyFactory implements InvocationHandler{

 private Object target;
 
 //构造
 public ProxyFactory(Object target) {
     this.target = target;
 }
    
    
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
    System.out.println("代理前。。。。。");    
    method.invoke(target, args);    
    System.out.println("代理后。。。。。");
    return null;
    }
    
      //给目标对象生成代理对象
    public Object getProxyInstance(){
        return Proxy.newProxyInstance(
                target.getClass().getClassLoader(),
                target.getClass().getInterfaces(),
                new ProxyFactory(target));
                }

}

三部搞定  下面就测试了

package relation;

public class Test {

    public static void main(String[] args) {

        Subject s = new SuperMan();
        
        //动态创建代理对象

        Subject sub =(Subject) new ProxyFactory(s).getProxyInstance();                    //实例
        sub.shoping("xiaoxiao");
        
        sub.sleeping();
        
    }

}

结果:

代理前。。。。。
xiaoxiao在购物
代理后。。。。。
代理前。。。。。
睡觉。。。
代理后。。。。。

 

posted @ 2018-06-09 21:25  我的小园子~  阅读(161)  评论(0编辑  收藏  举报