java简单的动态代理示例

来源:互联网 发布:redis 安装配置 linux 编辑:程序博客网 时间:2024/06/11 16:54


1、定义一个接口Student,后面用于强转proxy实例类型

interface Student {public void study();}

2、定义接口实现类StudentImpl

      对象调用getClass().getClassLoader(), getClass().getInterfaces(),用于proxy实例参数

public class StudentImpl implements Student {public void study() {System.out.println("woaixuexi");}}

3、定义自己的MyInvocationHandle实现InvocationHandler,在此定义所要增加的方法

import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;public class MyInvocationHandle implements InvocationHandler {private Object handler;public MyInvocationHandle() {super();}public MyInvocationHandle(Object handler) {super();this.handler = handler;}public Object invoke(Object arg0, Method arg1, Object[] arg2)throws Throwable {System.out.println("xuexiqianchifan");Object result = arg1.invoke(handler, arg2);System.out.println("shuijiao");return result;}}

4、测试类

      new StudentImpl 对象,作为参数传入MyInvocationHandle,产生proxy实例,向下转型为Student,不能是StudentImpl

import java.lang.reflect.Proxy;public class StudentTest {public static void main(String[] args) {StudentImpl st = new StudentImpl();MyInvocationHandle my = new MyInvocationHandle(st);Student p = (Student) Proxy.newProxyInstance(st.getClass().getClassLoader(), st.getClass().getInterfaces(), my);p.study();}}


0 0
原创粉丝点击