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);
}
}
4 Ending
解密完成。
明白真相,才会解开心中的锁——其实很简单。
分享到:
相关推荐
1. **非final类**:JavaBean类应该是非final的,这样其他类可以通过继承的方式来扩展JavaBean的功能。 2. **序列化**:JavaBean应该直接或间接实现`java.io.Serializable`接口,以便能够通过网络传输或持久化到磁盘...
**XStream:JavaBean与XML/JSON之间的转换大师** XStream是一个开源库,它为Java对象提供了简单且直观的XML序列化和反序列化的解决方案。它不仅能够将Java对象转换成XML,反之亦然,还能支持JSON格式的转换。这个...
JavaBean通常遵循一定的命名规则和设计模式,例如提供getter和setter方法来访问和修改属性值,以及构造函数用于初始化对象。 JSP则是一种用于创建动态网页的技术,它允许将Java代码嵌入到HTML或XML文档中。在商品...
JavaBean是Java编程中一种特殊类型的类,它遵循一定的规范,主要用于封装数据和业务逻辑,以便在Java Web应用程序中重用。JavaBean的作用域是指它在应用程序中的可见性和生命周期,通常有四个不同的作用域:Page、...
JSP之访问JavaBean的一个简单例子 使用useBean,jsp:setProperty,jsp:getProperty使用的一个简单例子 博客参考地址:https://blog.csdn.net/qq_36631076/article/details/79693890
在JSP页面中访问JavaBean的属性时,需要遵循特定的命名和大小写规则,否则会遇到属性找不到的错误。 #### 错误案例分析 当使用`<jsp:getProperty>`和`<jsp:setProperty>`标签时,如果属性名的大小写不匹配JavaBean...
这些方法需遵循特定的命名规则,如 `getName()` 和 `setName(String name)`。 #### 二、JavaBean 属性详解 JavaBean 的属性可以是任意类型,并且一个 JavaBean 可以拥有多个属性。为了方便访问这些属性,通常会为...
- **命名规则**:通常,JavaBean的类名应该以"Bean"结尾,例如`UserBean`。 - **公共无参构造器**:JavaBean需要提供一个公共的无参数构造函数,以便于实例化。 - **封装属性**:JavaBean中的属性应通过getter和...
- 遵循标准:JavaBean 必须遵循一定的命名规则和编码约定。 ##### 1.2 JavaBean 的分类 - **可视化 JavaBean**:主要用于图形用户界面 (GUI) 开发。 - **非可视化 JavaBean**:通常用于封装业务逻辑或数据访问逻辑...
JavaBean是一种符合特定规范的Java类,通常用于封装数据和简单业务逻辑。在BBS论坛中,JavaBean可能包含用户信息、帖子对象等,它们在控制器和视图之间传递数据。 **BBS论坛功能实现:** 基于上述技术,BBS论坛可能...
javaBean/Log验证javaBean/Log验证javaBean/Log验证javaBean/Log验证javaBean/Log验证javaBean/Log验证javaBean/Log验证javaBean/Log验证javaBean/Log验证javaBean/Log验证
jsp+javaBean登陆参考 博文链接:https://shangdiyefankun.iteye.com/blog/129545
JavaBean是一种符合特定规范的Java类,它代表了业务对象,并提供了封装属性的方法。而XML则是一种结构化数据格式,常用于数据交换和配置文件。 JavaBean持久化通常通过序列化实现,序列化是将Java对象转换为字节流...
JavaBean是一种规范,用于创建可重用的组件,它的核心特点是在类中定义私有成员变量,并提供对应的getter和setter方法来访问和修改这些变量。 首先,JavaBean的规范要求: 1. 类是公共的(`public`)。 2. 提供无...
问题描述:存在一个JavaBean,它包含以下几种可能的属性: 1.boolean/Boolean 2.int/Integer 3.String 4.double/Double 属性名未知, 现在要给这些属性设置默认值, 以下是要求的默认值:String类型的默认值为字符串 ...
设计模式:MVC(jsp+servlet+javabean) 项目架构:B/S架构 主要技术:mvc 、java、jsp、bootstrap、html5、css、js、jquery等技术 运行环境:win7/win10/jdk1.8 运行工具:eclipse/Myeclipse,eclipse最兼容 数 据...
- 类名通常符合驼峰命名法,且类的成员变量和方法的访问修饰符应为public,以便外部访问。 - 构造方法通常是public的,且最好有一个无参构造方法供实例化使用。 - 对于boolean属性,可以使用`is`开头的getter,如...
### JavaBean属性命名规范 JavaBean是一种遵循特定编码标准的Java类,主要用于封装数据或表示简单的数据载体。在JavaBean中,属性的命名规范是非常重要的,因为它直接影响到代码的可读性和可维护性,同时也会影响到...
JavaBean作为业务逻辑的载体,负责处理数据和业务规则,而JSP则专注于页面展示。这种方式使得开发者能够将表现层和业务层分离,提高代码的可维护性和可重用性。 二、JSP中的JavaBean相关标签 1. `<jsp:useBean>`...