JavaBean规范

 

(1)JavaBean 类必须是一个公共类,并将其访问属性设置为 public  ,如: public class user{ …}

(2)JavaBean 类必须有一个空的构造函数:类中必须有一个不带参数的公用构造器,例如:public User() {…}

(3)一个javaBean类不应有公共实例变量,类变量都为private  ,如: private int id;

 ( 4 )javaBean属性是具有getter/setter方法的成员变量。也可以只提供getter方法,这样的属性叫只读属性;也可以只提供setter方法,这样的属性叫只写属性;  如果属性类型为boolean类型,那么读方法的格式可以是get或is。例如名为abc的boolean类型的属性,它的读方法可以是getAbc(),也可以是isAbc();

一般JavaBean属性以小写字母开头,驼峰命名格式,相应的 getter/setter 方法是 get/set 接上首字母大写的属性名。例如:属性名为userName,其对应的getter/setter 方法是 getUserName/setUserName。

但是,还有一些特殊情况:

1、如果属性名的第二个字母大写,那么该属性名直接用作 getter/setter 方法中 get/set 的后部分,就是说大小写不变。例如属性名为uName,方法是getuName/setuName。

2、如果前两个字母是大写(一般的专有名词和缩略词都会大写),也是属性名直接用作 getter/setter 方法中 get/set 的后部分。例如属性名为URL,方法是getURL/setURL。

3、如果首字母大写,也是属性名直接用作 getter/setter 方法中 get/set 的后部分。例如属性名为Name,方法是getName/setName,这种是最糟糕的情况,会找不到属性出错,因为默认的属性名是name。

所以在JavaBean命名时应该注意符合以上命名规范。

————————————————————————————————————————————————————————

属性名/类型                 |                  getter 方法              |                    setter 方法 

————————————|——————————————————|——————————————————————————

xcoordinate/Double      | public Double getXcoordinate()     | public void setXcoordinate(Double newValue)

————————————|——————————————————|——————————————————————————

xCoordinate/Double      | public Double getxCoordinate()     |public void setxCoordinate(Double newValue)

————————————|——————————————————|——————————————————————————

XCoordinate/Double     |public Double getXCoordinate()      | public void setXCoordinate(Double newValue)

————————————|——————————————————|——————————————————————————

Xcoordinate/Double     |不允许                                        |    不允许

————————————|——————————————————|——————————————————————————

 

为什么JavaBean属性名要求:前两个字母要么都大写,要么都小写。

一般情况下。Java的属性变量名都已小写字母开头,如:userName,showMessage等,但也存在着特殊情况,考虑到一些特定的有意思的英文缩略词如(USA,XML等),JavaBean也允许大写字母起头的属性变量名,不过必须满足“变量的前两个字母要么全部大写,要么全部小写”的要求,如:IDCode、ICCard、idCode等属性变量名是合法的,而iC、iCcard、iDCode等属性变量名是非法的。正是由于这个原因造成了下面这种情况: 

举个例子: 

Java代码:

 

public class RegionDTO implements Serializable {

        public String cId;

        public String getCid() {

            return cid;

        }

        public void setCid(String cid) {

            this.cid = cid;

        }

        public String cName;

        public String getCName() {

            return cName;

        }

        public void setCName(String name) {

            cName = name;

        }

    }

 

封装成List后,然后在页面上用C标签进行显示 

  ${item.cId}//报错 RegionDTO没有这个属性!!!  

 

转自:http://chanson.javaeye.com/blog/419028 

1、背景 

本文讲的普通JavaBean只是一个拥有Property(域/类变量)及其setter/getter的普通Java类。 

有一定Java开发经验的人可能会知道,普通JavaBean的Property(域/类变量)的命名不能采用以下形式:aA***或者Aa***,如:"aDdress"或"Address",否则,在web应用中会报无法找到这个Property(因为根据"规则",需要找的是"ADdress"或"address")。但对于其中的原因,一般人都不明白,难道这是Sun公司当初定的规范吗? 

Java开源以后,我们终于可以解开其中的谜: 

 

2、普通JavaBean处理涉及到相关类 

在web应用中,Servlet容器或者EJB容器一般会使用java.beans包中的类来加载这些JavaBean。 

BeanInfo(接口) 

   | 

SimpleInfo(类) 

   | 

GenericBeanInfo(类) 

GenericBeanInfo是JavaBean数据装载类。 

Introspector是JavaBean处理中最重要的一个处理类。 

另外的一些辅助类,就不一一列举了。 

 

3、解密 

3.1 开始 

在应用中,我们通常会用以下代码来获取一个普通JavaBean相关的信息: 

BeanInfo mBeanInfo = null; 

try { 

mBeanInfo = Introspector.getBeanInfo(Person.class); 

} catch (IntrospectionException e) { 

e.printStackTrace(); 

3.2 深入 

在Introspector类的getBeanInfo方法中,我们发现其中与Property处理相关的行: 

private GenericBeanInfo getBeanInfo() 

        throws IntrospectionException { 

        …… 

        PropertyDescriptor apropertydescriptor[] = getTargetPropertyInfo(); 

        …… 

    } 

3.3 继续深入 

在Property处理方法中,我们发现其处理方式是根据getter/setter的方法来得到Property(域/类变量) 

private PropertyDescriptor[] getTargetPropertyInfo() throws IntrospectionException{ 

   …… 

if(s.startsWith("get")) obj = new PropertyDescriptor(decapitalize(s.substring(3)), method, null); 

…… 

3.4 关键 

接下来,最关键的就是下面这个方法: 

public static String decapitalize(String s) 

    { 

        if(s == null || s.length() == 0) 

            //空处理 

            return s; 

        if(s.length() > 1 && Character.isUpperCase(s.charAt(1)) && Character.isUpperCase(s.charAt(0))){ 

            //长度大于1,并且前两个字符大写时,返回原字符串 

            return s; 

        } else{ 

            //其他情况下,把原字符串的首个字符小写处理后返回 

            char ac[] = s.toCharArray(); 

            ac[0] = Character.toLowerCase(ac[0]); 

            return new String(ac); 

        } 

    } 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值