我们可以使用Proxy.newProxyInstance来创建动态代理类实例,或者使用Proxy.getProxyClass()获取代理类对象再反射的方式来创建,下面我们以com.anbai.sec.proxy.FileSystem接口为例,演示如何创建其动态代理类实例。

    Proxy.newProxyInstance示例代码:

    1. // 创建UnixFileSystem类实例
    2. FileSystem fileSystem = new UnixFileSystem();
    3. // 使用JDK动态代理生成FileSystem动态代理类实例
    4. FileSystem proxyInstance = (FileSystem) Proxy.newProxyInstance(
    5. FileSystem.class.getClassLoader(),// 指定动态代理类的类加载器
    6. new Class[]{FileSystem.class}, // 定义动态代理生成的类实现的接口
    7. new JDKInvocationHandler(fileSystem)// 动态代理处理类
    8. );

    Proxy.getProxyClass反射示例代码:

    1. // 创建UnixFileSystem类实例
    2. FileSystem fileSystem = new UnixFileSystem();
    3. // 创建动态代理处理类
    4. InvocationHandler handler = new JDKInvocationHandler(fileSystem);
    5. // 通过指定类加载器、类实现的接口数组生成一个动态代理类
    6. Class proxyClass = Proxy.getProxyClass(
    7. FileSystem.class.getClassLoader(),// 指定动态代理类的类加载器
    8. new Class[]{FileSystem.class}// 定义动态代理生成的类实现的接口
    9. );
    10. // 使用反射获取Proxy类构造器并创建动态代理类实例
    11. FileSystem proxyInstance = (FileSystem) proxyClass.getConstructor(
    12. new Class[]{InvocationHandler.class}).newInstance(new Object[]{handler}
    13. );