本帖最后由 廖成 于 2013-1-28 11:30 编辑
JavaBean
- JavaBean 是一个特殊的 Java 类,它的方法名要符合一定的规则命名。例如 get()、set() 方法。一个 JavaBean 类可以当做普通的类来使用,但是一个普通的类并不一定可以当作 JavaBean 来操作。因为它不一定符合 JavaBean 的规则。
- 为什么使用 JavaBean?在 JavaEE 的开发中,经常要使用到 JavaBean。很多环境就要求按 JavaBean 方式进行操作。再一个就是用 jdk 提供的 API 来把类当作 JavaBean 操作起来非常方便。
- JavaBean 是一种特殊的 Java 类。主要用于传递数据信息,这种 Java 类中的方法要用于访问私有的字段,且方法名符合某种命名规则。如果在两个模块之间传递多个信息,可以将这些信息缝扎un个到一个 JavaBean 中,这种 JavaBean 的实例对象通常称之为值对象(Value Object ,简称 VO)。这些信息在类中有私有字段来存储,如果读取或设置这些字段的值,则需要通过一些相应的方法来访问。
- jdk 中提供了对 JavaBean 进行操作的一些 API ,这套 API 就称为内省。用内省这套 API 来操作 JavaBean 比用普通类的方式更方便。
用内省来操作 JavaBean ,先读取 JavaBean 的值,再设置 JavaBean 的属性值:- public class A {
-
- public static void main(String[] args) throws Exception {
- B b = new B();
- PropertyDescriptor pd = new PropertyDescriptor("name", b.getClass()); // 属性描述符,指向某个属性
- Method m1 = pd.getWriteMethod();
- m1.invoke(b, "DrierKing_斌");
-
- Method m2 = pd.getReadMethod(); // 获取get()方法
- Object obj = (Object) m2.invoke(b);
- System.out.println(obj);
- }
- }
-
- class B {
-
- private String name;
- private int age;
-
- public String getName() {
- return name;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- public int getAge() {
- return age;
- }
-
- public void setAge(int age) {
- this.age = age;
- }
- }
复制代码 按照 BeanInfo 获取类- public class A {
-
- public static void main(String[] args) throws Exception {
- B b = new B();
-
- BeanInfo beanInfo = Introspector.getBeanInfo(b.getClass()); // 从一个类的字节码中以 JavaBean 的方式读取类信息
- PropertyDescriptor[] getPropertyDescriptors = beanInfo
- .getPropertyDescriptors(); // 获取这个 JavaBean 对象中的所有属性
- for (PropertyDescriptor propertyDescriptor : getPropertyDescriptors) {
- if (propertyDescriptor.getName().equalsIgnoreCase("name")) { // 判断这个属性名是否是我们想要的
- Method write = propertyDescriptor.getWriteMethod();
- write.invoke(b, "DriverKing_斌");
- Method read = propertyDescriptor.getReadMethod();
- System.out.println(read.invoke(b, null));
- }
- }
- }
- }
-
- class B {
-
- private String name;
- private int age;
-
- public String getName() {
- return name;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- public int getAge() {
- return age;
- }
-
- public void setAge(int age) {
- this.age = age;
- }
- }
复制代码 |