4. 反射

  1. 什么是反射?
    https://www.jianshu.com/p/9be58ee20dee
    反射是指:在运行状态中,对于一个类,可以获得其属性和方法;对于一个对象,可以调用其属性和方法;这种动态获取类的信息和调用对象方法的机制叫Java的反射机制。

    截屏2020-06-26下午5.20.43.png

    截屏2020-06-26下午5.24.06.png

    截屏2020-06-26下午5.24.59.png

  2. 什么是 java 序列化?什么情况下需要序列化?
    序列化:把对象转为字节序列的过程称为对象序列化。
    反序列化:把字节序列恢复成对象的过程。

什么情况下需要序列化:
a)当你想把的内存中的对象状态保存到一个文件中或者数据库中时候;
b)当你想用套接字在网络上传送对象的时候;
c)当你想通过RMI传输对象的时候;


截屏2020-06-26下午8.23.30.png
截屏2020-06-26下午8.21.36.png
截屏2020-06-26下午8.22.12.png
  1. 动态代理是什么?有哪些应用?
    当想要给实现了某个接口的类中的方法,加一些额外的处理。比如说加日志,加事务等。可以给这个类创建一个代理,故名思议就是创建一个新的类,这个类不仅包含原来类方法的功能,而且还在原来的基础上添加了额外处理的新类。这个代理类并不是定义好的,是动态生成的。具有解耦意义,灵活,扩展性强。
    动态代理的应用:

    • Spring的AOP
    • 加事务
    • 加权限
    • 加日志
  2. 怎么实现动态代理?
    https://www.jianshu.com/p/9bcac608c714
    首先必须定义一个接口,还要有一个InvocationHandler(将实现接口的类的对象传递给它)处理类。再有一个工具类Proxy(习惯性将其称为代理类,因为调用他的newInstance()可以产生代理对象,其实他只是一个产生代理对象的工具类)。利用到InvocationHandler,拼接代理类源码,将其编译生成代理类的二进制码,利用加载器加载,并将其实例化产生代理对象,最后返回。
    1.一个接口
    2.一个实现接口的被代理类
    3.实现InvocationHandler接口的代理类,重写invoke()方法
    4.main函数中:
    1)new一个被代理类HelloInterface hello = new Hello();
    2)new一个代理类把代理类作为参数传入InvocationHandler handler = new ProxyHandler(hello);

  1. 执行动态代理HelloInterface proxyHello = (HelloInterface) Proxy.newProxyInstance(hello.getClass().getClassLoader(), hello.getClass().getInterfaces(), handler);





最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。