JDK代理的小例子

Posted zhangmms

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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在购物
代理后。。。。。
代理前。。。。。
睡觉。。。
代理后。。。。。

 


以上是关于JDK代理的小例子的主要内容,如果未能解决你的问题,请参考以下文章

spring aop中this和target区别

简单jdk动态代理

简单jdk动态代理

动态代理之 CGLIB 动态代理

PHP中代理函数调用的小案例

Spring AOP JDK动态代理与CGLib动态代理区别