Java动态代理---动态类Proxy的使用

 代理模式
 
 简介:
    不直接操作实际的对象,而是通过代理对象间接操作实际对象,具体使用者不知道操作的具体
    对象还是实际对象。

静态代理

1、例
  1)、被代理类
          package demo3;
        public class AA {
        
            public void method(){
                System.out.println("adfadf");
            }
        }
  2)、代理类
        public class BB {
            private Object aa;
            public BB(Object aa) {
                super();
                this.aa = aa;
            }
            public Object getAa() {
                return aa;
            }
        }
        
  3)、测试
      package demo3;
    public class Example {
    
        public static void main(String[] args) {
            AA aa=new AA();
            BB bb=new BB(aa);
            ((AA)(bb.getAa())).method();
        }
    }

Java动态代理---动态类Proxy的使用
    
1、被代理类接口
package demo2;
public interface IA {

    public String method1(String str,String str1);
    public void method2();
}

2、被代理类
package demo2;
public class A implements IA{

    @Override
    public String method1(String str,String str1) {
        System.out.println("method1------"+str+"------"+str1);
        return str1;
    }

    @Override
    public void method2() {
        System.out.println("method2");
    }
}

3、代理类
package demo2;

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

public class HandleProxyA implements InvocationHandler {

    private IA ia;
    
    public HandleProxyA(IA ia) {
        super();
        this.ia = ia;
    }

    /**
     * @param proxy:被代理类
     * @param method :被代理类方法
     * @param args :被代理类方法 方法列表
     * @return 返回值为被代理类方法返回值
     */
    @Override
    public Object invoke(Object proxy, Method method, Object[] args)
            throws Throwable {
        if(args!=null){
            for (int i = 0; i < args.length; i++) {
                System.out.println(args[i]);
            }
        }
        Object result = method.invoke(ia, args);
        
        System.out.println(result);
        
        return result;
    }
}

4、实例
      package demo2;

    import java.lang.reflect.Proxy;
    
    public class Example {
    
        public static void main(String[] args) {
            
            IA ia=new A();//被代理
            HandleProxyA proxyA=new HandleProxyA(ia);//代理
            //创建动态代理对象
            IA ia2 = (IA) Proxy.newProxyInstance(ia.getClass().getClassLoader(),ia.getClass().getInterfaces(), proxyA);
            ia2.method1("asdfad","245245");
            ia2.method2();
        }
    }

你可能感兴趣的:(java,动态代理,proxy)