浅谈 JavaBean与反射

时间:2021-05-23 19:06:25

 

JavaBean:

  每种编程语言,肯定都有自己独有的编程规范,我们的java也是如此。下面就浅谈一下JavaBean。
  那么什么是JavaBean呢?java不用解释了哈,bean就是豆子的意思。大家应该都看过java的卡通形象吧

?就是一个长得像一颗咖啡豆的小人,那就是JavaBean的第一层意思。
那第二层意思是什么呢?就是我们的编程规范了。
JavaBean的编程规范,总的来说有下面5类:
1、一个类  必须  包含一个public无参的构造方法。
2、必须  包含符合命名规范的get和set方法,以便访问javabean的属性。
3、JavaBean  应该  是可串行(序列化)的,即实现Serializable接口。
4、必须支持内省(反射)。
5、如果JavaBean有运行时外观,那  必须  扩展java.awt.Component类。


反射(Reflection):

反射的定义:在运行期去探究和使用一个在编译期未知的类。

为什么能通过反射获取到类的相关信息呢?

因为,java虚拟机在装载类的时候,会先创建一个该类的类模板对象,该类的所有信息都封装在了这个对

象中。所以,我们才能通过这个类模板对象去获得我们想要的该类的信息。

如何取得一个类模板呢?有下列三种方式:
1--知道类型
Class cl = String.class;
**注意这里的.class既不是属性,也不是方法哦。是一个关键字**
如果这里的String为int,那么在JDK1.5以后是正确的,在之前会报错。因为JDK1.5以后有了一个自动装

箱的功能。写一个int(基本数据类型)其实是先转成了包装类,再获取的Class对象。

2--有了对象后:
Class cl = new String("123").getClass();

3--通过完整的类名(包名+类名)获取****重点****
Class cl = Class.forName("完整的类名");

获取到类模板以后,是不是就应该获取这个类里面的构造方法、属性、方法了?

获取构造方法:

    获取所有的公共的构造方法
    Constructor publicCons = cl.getConstructors();
    获取所有的构造方法
    Constructor publicCons = cl.getDeclaredConstructors();


    获取指定的公共的构造方法
    Constructor publicCon = cl.getConstructor(AAA);
    获取所有的构造方法
    Constructor anyCon = cl.getDeclaredConstructor(AAA);
    //AAA:是参数类型,如该构造方法传一个int类型,那么就是int.class,无参就什么都不写。

   方法、属性是一样的,只是把getConstructor等里面的Constructor分别改成了Field 和Method。

当一个方法或者属性甚至构造方法没有访问权限的时候,可以先强制设置它的访问权限。但这是一种破坏

封装的做法,具体的,大家就自己去看了。就一句代码,我就不写了哈。

得到了相关的信息后,是不是就要调用了?

调用构造方法产生实例:
Object obj = (Object)anyCon.newInstance(AAA);当然了,这里直接就用的Object,也可以不用强转。

使用反射对属性进行设值
anyField.set(要被设值的对象,具体的值);

使用反射调用方法:
anyMethod.invoke(要被设值的对象,被调用的方法需要的实参);


综上所述,我们就能发现,整个反射的流程就是:

获取想要操作的类的类模板对象

调用方法获取到该类的我们需要的信息

使用Reflection API来操作这些信息

反射是很高级的应用,这里只是介绍了如果使用简单的反射,有什么不足之处请大家多多指教。一起交流

进步!