For investors
股价:
5.36 美元 %For investors
股价:
5.36 美元 %认真做教育 专心促就业
java编程开发语言是目前大多数软件开发程序员都在学习的一个编程开发语言,而本文我们就简单来了解一下,java编程反射与代理基础知识分享。
Java反射
先,我们得弄清一个,什么是反射(Reflection)。简单的来说,反射就是让我们在程序运行的时候能够查看到类的信息,获取并调用类的任意方法和属性。
在Java运行时,系统会将所有的对象维护一个被称为运行是的类型标识,然后这个信息跟踪这每个对象所属的类,我们可以和根据Java专门的类访问这些信息,这个类就是Class【实际上Class对象表示的是一个类型,它不一定是类,可能是基本数据类型,比如int】。
代理
代理就是给某个对象提供一个代理对象,并由代理对象控制对于原对象的访问,即客户不直接操控原对象,而是通过代理对象间接地操控原对象。
代理分为:
静态代理:代理类是在编译时就已经实现好了,成为了一个class文件
动态代理:是在程序运行时动态地生成类字节码,然后加载到JVM中
有几个概念:
抽象角色:接口类
实现角色:实现类
代理角色:代理实现的类,终使用的对象
动态代理
本次动态代理是针对JDK动态代理进行探讨。
正如前面所说,如果我们要在很多类使用同一种逻辑时,会心态爆炸,那么我们怎么去解决这个问题呢,这时候,我们可以想一想反射。
在使用的动态代理的过程中,有两个关键的东东,一个是InvocationHandler接口,一个是Proxy类。
InvocationHandler
每一个动态代理类都必须要实现InvocationHandler这个接口,并且每个代理类的实例都关联到了一个handler,当我们通过代理对象调用一个方法的时候,这个方法的调用就会被转发为由InvocationHandler这个接口的invoke方法来进行调用。
proxy: 指代我们所代理的那个真实对象,也就是实现类
method: 指代的是我们所要调用真实对象的某个方法的Method对象
args: 指代的是调用真实对象某个方法时接受的参数
Proxy
Proxy这个类的作用就是用来动态创建一个代理对象的类
其中我们使用多是newProxyInstance()去创建代理类
loader:一个ClassLoader对象,定义了由哪个ClassLoader对象来对生成的代理对象进行加载
interfaces:一个Interface对象的数组,表示的是我将要给我需要代理的对象提供一组什么接口,如果我提供了一组接口给它,那么这个代理对象就宣称实现了该接口(多态),这样我就能调用这组接口中的方法了
h:一个InvocationHandler对象,表示的是当我这个动态代理对象在调用方法的时候,会关联到哪一个InvocationHandler对象上
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请加danei0707学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。