public static <T, S> T copy(S source, T target, String... ignore) {
        return copy(source, target, DEFAULT_CONVERT, ignore);
    }
@Test
    public void testProxy() {
        AtomicReference<Object> reference = new AtomicReference<>();

        ProxyTest test = (ProxyTest) Proxy.newProxyInstance(ClassUtils.getDefaultClassLoader(),
                                                            new Class[]{ProxyTest.class}, (proxy, method, args) -> {
                    if (method.getName().equals("getName")) {
                        return "test";
                    }

                    if (method.getName().equals("setName")) {
                        reference.set(args[0]);
                        return null;
                    }

                    return null;
                });

        Target source = new Target();

        FastBeanCopier.copy(test, source);
        Assert.assertEquals(source.getName(), test.getName());


        source.setName("test2");
        FastBeanCopier.copy(source, test);

        Assert.assertEquals(reference.get(), source.getName());
    }