0
点赞
收藏
分享

微信扫一扫

JDK与cglib动态代理

一ke大白菜 2022-03-18 阅读 56

JDK:

import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

public class JDKProxyTest {

    public static Object createProxy(Object object){
        //jdk的动态代理方法
        //可用于日志管理,动态代理等
        ClassLoader classLoader = object.getClass().getClassLoader();
        Class<?>[] interfaces = object.getClass().getInterfaces();
        return Proxy.newProxyInstance(classLoader, interfaces, (Object proxy, Method method, Object[] args) ->{

            Class<?>[] interfaces1 = proxy.getClass().getInterfaces();
            Field[] fields = interfaces[0].getFields();

            String methodName = method.getName();
            System.out.println("正在执行"+methodName+"方法");
            return method.invoke(object, args);
        });
    }

    static interface User{
        public void setName(String name);
        public String getName();
    }

    static class UserImpl implements User {

        String name;
        String phone;
        int age;

        public UserImpl(String userName){
            this.name = userName;
        }

        @Override
        public void setName(String name) {
            this.name = name;
        }

        @Override
        public String getName() {
            return name;
        }
    }

    public static void main(String[] args) {
        User user = (User)createProxy(new UserImpl("张三"));

        user.setName("李四");

        String name = user.getName();

        System.out.println(name);
    }

}

cglib:

举报

相关推荐

0 条评论