2008.04.11 Thinking in java 笔记, 一个纯的java bean的规则.以下只是个人的总结,有不对的地方还请大家指出.
现在很多的框架语言的配置大都采用java bean类了,包括WebWork,Struts2,Spring,JSF等.那么一个java bean应该有什么样的特点呢.
1. 有一个public,没有参数,的构造方法.
- public 是因为这个类要被其它的类来调用(多数由框架中的对象工厂来创建一个新的对象),所以这个类必须能被任何其它的类访问,也就只能是public的.
- 没有参数是因为对象工厂来创建这个bean对象时通常是像下面这样的过程创建的:
Class c = null ;
Object obj = null ;
try ... {
c = Class.forName(className);
obj = c.newInstance();
} catch (ClassNotFoundException e) ... {
logger.error("error happened when find class :" + className,e);
} catch (InstantiationException e) ... {
logger.error("error happened when create newInstance :" + className,e);
} catch (IllegalAccessException e) ... {
logger.error("error happened when create newInstance :" + className,e);
} - className就是.xml配置文件中的<bean-class-name>属性,必须是java类的全名称(包含package的名称),这个方法(newInstance())调用的是没有参数的bean的构造方法,对于某些框架(例如Spring)中的创建bean时可以有参数,是调用的
Constructor.newInstance
,这里就不讨论了,个人认为一个纯的java bean对象的构造方法应该是没有参数的,所有的属性(Properties)都应该在对象创建以后通过get,set 方法来进行赋值.
2. 属性(Properties)的命名应该符合java的命名规范,即首个单词的字母应该小写.有相应的set,get方法
每个属性应该是private方法的,这样对属性的操作只能通过其set,get方法(这句话应该不绝对,因为Hibernate的对象与表结构的对应配置时,说即使是private的属性没有public的set 方法也是可以对其赋值的,确切是怎样实现的,还没研究过).,
每个属性有其public 的set,get方法,这样才能使得bean 中的属性可以进行读写操作,创建set,get方法时要注意,属性的名称在set,get方法中的第一个字母要大写的,还有就是属性的名称与set,get后的字段要完全匹配,像这样,
String methodName = " get "
+ propertyName.substring( 0 , 1 ).toUpperCase()
+ propertyName.substring( 1 );改变属性的名称后,其相应的set,get方法也要修改,不然会使得类中有值,但是在页面上却显示不出来,对于使用Eclipse做为开发工具的朋友来说,可以用"Source"中的"Generate getter and setters" 命令.
有了相应的set,get方法,其它类就可以通过Method中的invoke()方法来对bean的属性进行操作了