JavaBean感觉学起来比较难,看了两三遍教程差不多,而且也不明白到底有什么实际的应用。就像那个反射一样,貌似也没神马用途,可能是现在还没接触到吧。
JavaBean 是一种JAVA语言写成的可重用组件。为写成JavaBean,类必须是具体的和公共的,并且具有无参数的构造器。JavaBean 通过提供符合一致性设计模式的公共方法将内部域暴露成员属性。
JavaBean的属性是根据对应的方法名称来的,比如方法的名称为getAge,那么这个属性名称就是age,原因是这样的,如果属性名称第二个字母是小写,那么第一个字母改成小写,如果第二个字母是大写,则第一个字母也改成大写。
例: getAge 的属性名称为age(属性名的第二个字母为小写),getCPU的属性名称为CPU(第二个字母为大写)。
对JavaBean的简单内省操作:- import java.beans.PropertyDescriptor;
- import java.lang.reflect.Method;
- public class IntroSpectorTest {
- public static void main(String[] args) throws Exception {
- Beans hs = new Beans(5, 3);
- String propertyName = "x";//首先定义要获取的属性名称
- PropertyDescriptor pd = new PropertyDescriptor(propertyName, hs.getClass());
- //PropertyDescriptor 属性描述类,描述 Java Bean 通过一对存储器方法导出的一个属性。
- Method methodgetX = pd.getReadMethod(); //获取应该用于读取属性值的方法。
- Object obj = methodgetX.invoke(hs); //调用这个方法
- System.out.println(obj);
- Method setX = pd.getWriteMethod(); //获得应该用于写入属性值的方法。
- Object obj2 = setX.invoke(hs, 3);
- }
- }
- class Beans{
- private int x;
- private int y;
- public Beans(int i, int j) {
- this.x = i;
- this.y = j;
- }
- public int getX() {
- return x;
- }
- public void setX(int x) {
- this.x = x;
- }
- public int getY() {
- return y;
- }
- public void setY(int y) {
- this.y = y;
- }
- }
复制代码 对JavaBean的复杂内省操作:
采用遍历BeanInfo的所有属性方式来查找和设置某个JavaBean对象的x属性。首先可以通过内省类(Introspector)的getBeanInfo(Class<?> beanClass) 方法(在 Java Bean 上进行内省,了解其所有属性、公开的方法和事件)来获取所有的属性和方法,这个BeanInfo就是代表了整个javabean。- import java.beans.BeanInfo;
- import java.beans.Introspector;
- import java.beans.PropertyDescriptor;
- import java.lang.reflect.Method;
- public class IntroSpectorTest {
- public static void main(String[] args) throws Exception {
- Beans hs = new Beans(5, 3);
- String propertyName = "x";//首先定义要获取的属性名称
- BeanInfo bInfo = Introspector.getBeanInfo(hs.getClass());
- PropertyDescriptor[] pds = bInfo.getPropertyDescriptors();
- PropertyDescriptor pdx = null;
- for(PropertyDescriptor pd : pds){
- if(pd.getName().equals(propertyName)){
- pdx = pd;
- break;
- }
- }
- if(pdx != null){
- Method methodGet = pdx.getReadMethod();
- Method methodSet = pdx.getWriteMethod();
- System.out.println(methodGet.invoke(hs));
- }
- }
- }
- class Beans{
- private int x;
- private int y;
- public Beans(int i, int j) {
- this.x = i;
- this.y = j;
- }
- public int getX() {
- return x;
- }
- public void setX(int x) {
- this.x = x;
- }
- public int getY() {
- return y;
- }
- public void setY(int y) {
- this.y = y;
- }
- }
复制代码 |