动态代理

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了动态代理相关的知识,希望对你有一定的参考价值。

软件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.运行结果如图

技术分享

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

动态代理模式——JDK动态代理

动态代理

设计模式 结构型模式 -- 代理模式(动态代理(JDK动态代理(JDK动态代理要求必须定义接口,对接口进行代理。)动态代理原理(使用arthas-boot.jar查看代理类的结构)动态代理的作用)(代

动态代理——JDK中的动态代理

Spring 静态代理+JDK动态代理和CGLIB动态代理

(java反射-JDK动态代理)+CGLIB动态代理