java反射

JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。

Java的反射就是不通过new的方法,从而获取一个类的内容.

1). jdbc中的:class.forname("drivername....") 就是利用了反射; spring配置文件XML文件中的bean标签,需要提供一个class的属性就是要通过解析XML文件获取类路径,从而加载类的class文件.

class文件就是java文件的编译文件,这个文件中包含java中的所有内容.

2). .class方法则是所有类里面的一个隐藏方法,通过他可以得到class文件.

3). 还有一种方法就是通过.getclass来进行获取.这个方法一般用在通过object接收了一个对象,不知道他的类型,直接.getclass获取他的内部信息.

 

通过 Class 类获取成员变量、成员方法、接口、超类、构造方法等

 

 

Class 有很多方法:

  getName():获得类的完整名字。

  getFields():获得类的public类型的属性。

  getDeclaredFields():获得类的所有属性。包括private 声明的和继承类

  getMethods():获得类的public类型的方法。

  getDeclaredMethods():获得类的所有方法。包括private 声明的和继承类

  getMethod(String name, Class[] parameterTypes):获得类的特定方法,name参数指定方法的名字,parameterTypes 参数指定方法的参数类型。

  getConstructors():获得类的public类型的构造方法。

  getConstructor(Class[] parameterTypes):获得类的特定构造方法,parameterTypes 参数指定构造方法的参数类型。

  newInstance():通过类的不带参数的构造方法创建这个类的一个对象。

 

动态代理:

https://www.cnblogs.com/aspirant/p/9036805.html

动态代理就是提供一个中间人作为自动创建对象的一个方法.这个方法必须由一个继承了 InvocationHandler 接口的一个代理类进行代理.

那么问题来了:谁是中间人? 

中间人是:    Proxy

这个类有一个方法是用来做这个的:

public static Object newProxyInstance(ClassLoader loader, Class<?>[] interfaces,  InvocationHandler h)  throws IllegalArgumentException

 

这个方法需要三个参数:

loader:  一个ClassLoader对象,定义了由哪个ClassLoader对象来对生成的代理对象进行加载

interfaces:  一个Interface对象的数组,表示的是我将要给我需要代理的对象提供一组什么接口,如果我提供了一组接口给它,那么这个代理对象就宣称实现了该接口(多态),这样我就能调用这组接口中的方法了

h:  一个InvocationHandler对象,表示的是当我这个动态代理对象在调用方法的时候,会关联到哪一个InvocationHandler对象上

 

第一个参数可以通过.class().getClassLoader() 方法进行获得

https://blog.csdn.net/lwl20140904/article/details/80163880

 

靠配置文件运行的反射:

首先:配置文件的格式是固定的,这样才能被一个 Properties类型(这个类型就是一个键值对的类型) 

  1. className = cn.fanshe.Student2  

  2. methodName = show2  

 

通过读取流读取配置文件后就能够得到这个文件中的内容,读取到内容之后,className 是类包名, methodName 是方法名.

有了这两个就能够通过反射进行加载了.

这样的好处就是系统更新的时候不需要修改源码,直接修改配置文件,添加相应的代码文件就可以了.

 

动态代理:

静态代理就是针对不同的目标创建不同的代理对象,这样就会造成多个对象,代理的意义就不大了.

为了能够创建一个代理对象,而去代理多个不同的目标,这样就会节省很多空间.但是这个方法的前提条件是:必须提供一个目标的实例化对象,

通俗一些讲:代理的作用就像是秘书,可以雇主做所有的事情(假设),添加秘书之后有什么好处?我可以告诉秘书记得给我记账,如果没有秘书,雇主每次消费之后都得自己去记账,有了秘书之后,雇主只需要负责消费,记账就让秘书干了,这样记账这件事儿(代码)就不需要每次都亲自执行了,这就是静态代理, 问题来了,如果有一百个雇主呢?我要一个一个配秘书,资源太浪费了,这么大的开销,还不如我自己来(项目过大,容易造成资源浪费),是时候配一个大总管了,这个大总管将会代理所有人的事情,这样我就不需要和一百个秘书打交道了,而且开销也小了(只有一个动态代理),这个就是动态代理.

总结:代理就是实现一个切片管理的工具.

 

代码中使用代理有什么用???

https://blog.csdn.net/qq_26975307/article/details/53666166

 

 

 

 

 

 

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值