JavaBean和内省
来源:互联网 发布:数控滚齿机编程 编辑:程序博客网 时间:2024/05/20 21:58
如要转载请标明作者zjrodger和出处:http://blog.csdn.net/zjrodger/,谢谢。
笔记目录(·) 由内省引出JavaBean的讲解
(·) BeanUtils工具包操作JavaBean
1. BeanUtils工具包的安装和配置
2. common-logging日志开发包的安装和配置
3. 常见错误——要操作的那个目标Bean类必须是public的
(·) 由内省引出JavaBean的讲解
1. 什么是JavaBean
JavaBean是一种Java的特殊类,主要用于传递数据,这种类中的方法主要用于访问private字段,而且方法名是符合某种命名规范来命名的。
比如:
class Person{
private int age;
public Person(){......}
int getAge(){}
void setAge(int age){}
}
Person类的定义就是一个典型的JavaBean。
注意:
(1)JavaBean的一个重要特性,JavaBean必须要有一个无参构造器。
Introspector--------> JavaBean -------> 特殊的Java类
2. 何为内省
JDK中提供了对JavaBean进行操作的一些API,这套API就称为内省。
3. PropertiyDescriptor
Construct a PropertyDescriptor for a property that follows the Java Standard Convention by having getFoo and setFoo
accessor methods.
(1) 代码示例:
package com.zjrodger;import java.beans.IntrospectionException;import java.beans.PropertyDescriptor;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;/** * 内省的简单应用。 * **/class Person04{private int age;private String name;public Person04(){}public Person04(String name, int age){this.name = name;this.age = age;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}}public class Introspector {public static void main(String[] args) {try {Person p1 = new Person("zjrodger",26);String propertyName = "age";PropertyDescriptor pd = new PropertyDescriptor(propertyName, p1.getClass());Method readMethod = pd.getReadMethod();Object returnedValue = readMethod.invoke(p1, null);System.out.println(returnedValue);Method writeMethod = pd.getWriteMethod();writeMethod.invoke(p1, 20);Method readMethod02 = pd.getReadMethod();Object returnedValue02 = readMethod02.invoke(p1, null);System.out.println(returnedValue02);System.out.println(p1.getAge());} catch (IntrospectionException e) {e.printStackTrace();} catch (IllegalArgumentException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();} catch (InvocationTargetException e) {e.printStackTrace();}}}
(·) BeanUtils工具包操作JavaBean
1. BeanUtils工具包的安装和配置
(1) 在Apache官方上下载BeanUtils工具包,
下载链接:http://commons.apache.org/proper/commons-beanutils/download_beanutils.cgi
(2) 通过MyEclipse,在自己某个项目工程目录下创建一个名为lib的文件夹,并且将新下载的工具解压缩,然后将解压缩后的“commons-beanutils-1.9.2.jar”拷贝到lib文件夹下边。
如下图所示:
若通过“propertyes---->Add External Jars”的方法,则在自己的主机上可以成功使用该工具,若要在其他的主机上,则不能使用该工具,因为“Add External Jars”方法,只是将BeanUtils位于本地磁盘的路径传给了MyEclipse,并没有将BeanUtils工具拷贝到项目的工程中。
(3) 将复制到项目工程中的commons-beanutils-1.9.2.jar包添加到“Build Path”中去。
具体做法如下图所示:
(3.1) 步骤:右击“commons-beanutils-1.9.2.jar”--------> Build Path --------> Add to Build Path
(3.2) 结果:commons-beanutils-1.9.2.jar的图标会改变。
A.原来的图标:
B.加入到Build Path后的图标
多了一个Referenced Libraries,并且下边多了一个文件。
B.加入到Build Path后的图标
多了一个Referenced Libraries,并且下边多了一个文件。
2. common-logging日志开发包的安装和配置
【错误再现】
在运行代码"BeanUtils.getProperty(p1, "age")"时,出现下述错误:错误信息:Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
【原因分析】
缺少日志开发包(logging包),该包是Apache提供的。在开发Spring,Struts,Hibernate时会经常使用日志开发包。【解决方案】
下载common-logging工具包,并且在MyEclipse/Eclipse中进行相关配置。 (1) 在Apache官方上下载common-logging工具包,
下载地址:http://commons.apache.org/proper/commons-logging/download_logging.cgi
(2) 通过MyEclipse中,在自己某个项目工程目录下创建一个名为lib的文件夹,并且将新下载的工具解压缩,然后将解压缩后的“commons-beanutils-1.9.2.jar”拷贝到lib文件夹下边。
【参考文档】
1. Jakarta-Common-BeanUtils研究心得:
http://sunxboy.iteye.com/blog/149864
3. 常见错误——要操作的那个目标Bean类必须是public的
【错误再现】
1. BeanUtils工具包的安装和配置正确。
2. common-logging日志开发包的安装和配置。
3. 作为Bean类的Person04的属性和方法的定义均符合JavaBean的规范。
4. 作为Bean类的Person04和BeanUtilsTest类写在了同一个名为BeanUtilsTest的java文件中。
5. 在运行代码"BeanUtils.getProperty(p1, "age")"时,出现下述错误:
java.lang.NoSuchMethodException: Property 'name' has no getter method in class 'class com.zjrodger.Person04'
【错误代码】
package com.zjrodger;import java.beans.IntrospectionException;import java.beans.PropertyDescriptor;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;import org.apache.commons.beanutils.BeanUtils;/** * 内省的简单应用。 * **/class Person04{private int age;private String name;public Person04(){}public Person04(String name, int age){this.name = name;this.age = age;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}}public class BeanUtilsTest {public static void main(String[] args) {try {Person04 p1 = new Person04("aaa",8);String propertyName = "name";System.out.println("name = "+BeanUtils.getProperty(p1, propertyName));} catch (IllegalAccessException e) {e.printStackTrace();} catch (InvocationTargetException e) {e.printStackTrace();} catch (NoSuchMethodException e) {e.printStackTrace();}}}
【原因分析】
即,要操作的那个目标Bean类必须是public的。
应该把Person04类的定义写在另一个java文件中,根据Bean的规范,每一个Bean类都应该单独写在一个java文件中
0 0
- 内省和JavaBean
- JavaBean和内省
- JavaBean和内省
- JavaBean和内省 IntroSpector
- 内省(introspector)和javabean
- JavaBean 和内省
- 内省和JavaBean
- 黑马程序员-内省和JavaBean
- 内省和javaBean的学习
- JavaBean内省
- 内省 javaBean
- JavaBean内省
- JavaBean内省
- javaBean内省
- javabean内省
- 内省 JavaBean
- javaBean 内省
- 对javabean的简单内省和复杂内省操作
- 归档与反归档
- 线段树总结
- Spark的Graphx学习笔记--Pregel
- HDOJ 3944 DP?
- oracle的字符集设置与乱码
- JavaBean和内省
- netty权威指南一书中代码
- Dreamweaver CS6破解教程[序列号+破解补丁]
- php中检测变量是否是一个对象的is_object函数介绍及用法举例
- Forward: 软件测试与质量保证
- 修改配置真正解决php文件上传大小限制问题(apache+php)
- FFT
- 数据结构—队列
- Phalcon框架在读取和写入数据库时产生中文乱码