java动态代理简单实例。

来源:互联网 发布:企业计算机监控软件 编辑:程序博客网 时间:2024/04/30 08:23
package mytest;

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

public class RunProxy {
    public static void main(String[] args) {
        A a = new B();
        A proxy = (A) Proxy.newProxyInstance(  
                a.getClass().getClassLoader(),  
                a.getClass().getInterfaces(),  
                new ReadyInvocationHandler(a));
        proxy.eat();
        proxy.run();
    }
=============================================================
 interface A {
     public void eat();
    public void  run();

 }

==========================================================

 class B implements A {

    @Override
    public void eat() {
        // TODO Auto-generated method stub
        System.out.println("B======eat");
    }

    @Override
    public void run() {
        // TODO Auto-generated method stub
        System.out.println("B=====run");
    }
    

 }

==========================================================

 class ReadyInvocationHandler implements InvocationHandler {
    //真实类对象
        private Object B = null;  
      
        public ReadyInvocationHandler(Object realSubject) {  
            this.B = realSubject;  

        } 

//该方法为自动调用。

    @Override
    public Object invoke(Object proxy, Method method, Object[] args)
            throws Throwable {
        // TODO Auto-generated method stub
        Object result = null;
        System.out.println(proxy.getClass().getSimpleName());

        System.out.println("动态代理开始");

     //利用反射调用真实类的方法。

            result = method.invoke(this.B, args);
            System.out.println("动态代理结束");
        return result;
    }  

 }

总结动态代理步骤:第一个写一个接口,写一个真实类实现接口,第三写动态代理类。

$Proxy0
动态代理开始
B======eat
动态代理结束
$Proxy0
动态代理开始
B=====run
动态代理结束