反射

174 阅读1分钟
    1. 反射机制是什么?
      1. 反射机制是把Java的类的组成部分封装成类对象。
      2. Java代码编译后会生成字节码.class,字节码被类加载器封装成Class对象,其中变量封装成Field[],构造器封装成Constructor[],方法封装成Method[]。
      3. 利用反射可以调用类或对象,比如获取类定义,调用类变量、构造对象和方法,甚至可以运行时修改类定义
    1. 如何利用反射机制获取Class对象
      1. Class.forName("全类名(包名.类名)")
        1. 将字节码加载进内存
        2. 多用于配置文件:读取文件时加载类
      2. ClassName.class
      3. ClassName.getClass()
    2. 动态代理的实现
      1. 实现InvokationHandler进行前置操作,然后用Proxy以调用目标为接口作为代理实例,以代理对象间接调用目标的逻辑。
      2. 例子:

    		public class MyDynamicProxy {
    		    public static  void main (String[] args) {
    		        HelloImpl hello = new HelloImpl();
    		        MyInvocationHandler handler = new MyInvocationHandler(hello);
    		        // 构造代码实例
    		        Hello proxyHello = (Hello) Proxy.newProxyInstance(HelloImpl.class.getClassLoader(), HelloImpl.class.getInterfaces(), handler);
    		        // 调用代理方法
    		        proxyHello.sayHello();
    		    }
    		}
    		interface Hello {
    		    void sayHello();
    		}
    		class HelloImpl implements  Hello {
    		    @Override
    		    public void sayHello() {
    		        System.out.println("Hello World");
    		    }
    		}
    		 class MyInvocationHandler implements InvocationHandler {
    		    private Object target;
    		    public MyInvocationHandler(Object target) {
    		        this.target = target;
    		    }
    		    @Override
    		    public Object invoke(Object proxy, Method method, Object[] args)
    		            throws Throwable {
    		        System.out.println("Invoking sayHello");
    		        Object result = method.invoke(target, args);
    		        return result;
    		    }
    		}