首页 > 代码库 > 动态代理

动态代理

软件152 刘昊翰

 动态代理

1.概念

 

Java动态代理类位于Java.lang.reflect包下,一般主要涉及到以下两个类:

(1)Interface InvocationHandler:该接口中仅定义了一个方法Object:invoke(Object obj,Method method,Object[] args)。在实际使用时,第一个参数obj一般是指代理类,method是被代理的方法,args为该方法的参数数组。这个抽象方法在代理类中动态实现。WIN

(2)Proxy:该类即为动态代理类,作用类似于上例中的ProxySubject

 

2.DynamicProxy.java核心代码:

 

package org.proxy.proxyClass;

import java.lang.reflect.InvocationHandler;

import java.lang.reflect.Method;

import java.lang.reflect.Proxy;

 

//动态代理类

public class DynamicProxy implements InvocationHandler{

    private Object obj;

    public Object bind(Object obj){

        this.obj=obj;

        return Proxy.newProxyInstance(obj.getClass().getClassLoader(),

                obj.getClass().getInterfaces(), this);

    }

    public Object invoke(Object proxy, Method method, Object[] objs)

            throws Throwable {

        Object result=null;

        try{

            before();

            result=method.invoke(obj, objs);

            after();

        }catch(Exception e){

            e.printStackTrace();

        }

        return result;

    }

    public void before(){

        System.out.println("订机票,订酒店,送老板");

        }

    

    public void after(){

        System.out.println("订机票,退酒店,接老板");

    }

}

3.运行结果如图

技术分享

动态代理