反射和动态代理这俩个问题

1.反射是什么意思,我网上查了一下,各位有没有更加通俗易懂的解释
2.动态代理是什么意思,各位有没有更加通俗易懂的解释

1、反射:举个例子,我们一般调用方法的时候,可能就是通过<对象>.<方法名>这样直接调用,但是方法一般都是public的,如果是private方法,则不能通过这种方式简单调用,可以通过反射机制,调用private方法。java面向对象编程,把一组特性封装成对象,提供public接口供外部访问修改属性信息,不让外部直接修改对象的内部属性。而反射你可以这么理解,他可以把这个对象撕开,让你直接调用这个对象内部的方法和属性,直接破坏了封装的对象,让对象的属性和方法暴露在编程者面前,让程序员在编写代码的时候可以有更大的灵活性。

img

    public static void main(String[] args) throws ClassNotFoundException, IllegalAccessException, InstantiationException, NoSuchMethodException, InvocationTargetException {
        Student student = new Student();
        //直接调用私有方法编译报错 'get()' has private access in 'Student'
        //student.get();

        //通过反射调用
        Class aClass = Class.forName("Student");
        Method m = aClass.getDeclaredMethod("get", null);
        Object o = aClass.newInstance();
        m.setAccessible(true);
        m.invoke(o, null);
    }

2、动态代理本质上就是通过反射实现的,它有一个目标对象和一个代理对象的概念,代理对象通过反射获取目标对象的指定方法,在调用目标对象对应方法的时候,对原方法进行增强或者补充,从而达到不变更目标对象的代码的前提下,实现程序的动态扩展。
举个简单例子,比如你有一个类叫Student,这个类里面有个方法setAge(),在这个方法里需要对学生的年龄赋值;有另外一个类叫Teacher,里面有个方法叫setStAge(),在这个方法里需要调用学生类的setAge()方法对学生年龄赋值,同时赋值前后需要进行一些提示,比如“请输入学生年龄”;在这个例子中学生类就可以理解为目标对象,教师类就是代理对象,代理对象教师在不改变学生类原有setAge()方法的前提下,进行了方法增强,添加了提示信息“请输入学生年龄”。
以上只是为了方便您理解,反射和动态代理远不止这些内容,谢谢

1、反射就是根据一个全限定类名,或者一个对象获取到这个对象的全部属性信息
    例如如果一个对象他有`public`修饰的属性,也有`private`修饰的属性,其他对象访问的时候只能访问到`public`修饰的属性,但是反射可以访问到这个对象所有的属性

2、动态代理,如果想要理解动态代理需要先知道什么是静态代理,这样更加有助于理解,
这里写过一遍静态代理和动态代理的贴子可以参考一下:https://blog.csdn.net/qq_38516524/article/details/121990051