javabean的属性 是根据 set和get方法来 操作的,而不是根据  成员变量 来操作的。注意区别   属性 和成员变量  成员变量是私有的 看不见。

一、 javabean 是什么?

Bean的中文含义是“豆子”,顾名思义,JavaBean是指一段特殊的Java类,

就是有默然构造方法,只有get,set的方法的java类的对象.

专业点解释是:

JavaBean定义了一组规则
JavaBean就是遵循此规则的平常的Java对象

满足这三个条件:  
   1.执行java.io.Serializable 接口 
 2.提供无参数的构造器 
  3.提供getter 和 setter方法访问它的属性.

简单地说,JavaBean是用Java语言描述的软件组件模型,其实际上是一个类。这些类遵循一个接口格式,以便于使函数命名、底层行为以及继承或实现的行为,可以把类看作标准的JavaBean组件进行构造和应用。

JavaBean一般分为可视化组件和非可视化组件两种。可视化组件可以是简单的GUI元素,如按钮或文本框,也可以是复杂的,如报表组件;非可视化组件没有GUI表现形式,用于封装业务逻辑、数据库操作等。其最大的优点在于可以实现代码的可重用性。JavaBean又同时具有以下特性。

易于维护、使用、编写。

可实现代码的重用性。

可移植性强,但仅限于Java工作平台。

便于传输,不限于本地还是网络。

可以以其他部件的模式进行工作。

对于有过其他语言编程经验的读者,可以将其看作类似微软的ActiveX的编程组件。但是区别在于JavaBean是跨平台的,而ActiveX组件则仅局限于Windows系统。总之,JavaBean比较适合于那些需要跨平台的、并具有可视化操作和定制特性的软件组件。

JavaBean组件与EJB(Enterprise JavaBean,企业级JavaBean)组件完全不同。EJB 是J2EE的核心,是一个用来创建分布式应用、服务器端以及基于Java应用的功能强大的组件模型。JavaBean组件主要用于存储状态信息,而EJB组件可以存储业务逻辑。
2  使用JavaBean的原因
程序中往往有重复使用的段落,JavaBean就是为了能够重复使用而设计的程序段落,而且这些段落并不只服务于某一个程序,而且每个JavaBean都具有特定功能,当需要这个功能的时候就可以调用相应的JavaBean。从这个意义上来讲,JavaBean大大简化了程序的设计过程,也方便了其他程序的重复使用。

JavaBean传统应用于可视化领域,如AWT(窗口工具集)下的应用。而现在,JavaBean更多地应用于非可视化领域,同时,JavaBean在服务器端的应用也表现出强大的优势。非可视化的JavaBean可以很好地实现业务逻辑、控制逻辑和显示页面的分离,现在多用于后台处理,使得系统具有更好的健壮性和灵活性。JSP + JavaBean和JSP + JavaBean + Servlet成为当前开发Web应用的主流模式。

3  JavaBean的开发

在程序设计的过程中,JavaBean不是独立的。为了能够更好地封装事务逻辑、数据库操作而便于实现业务逻辑和前台程序的分离,操作的过程往往是先开发需要的JavaBean,再在适当的时候进行调用。但一个完整有效的JavaBean必然会包含一个属性,伴随若干个get/set(只读/只写)函数的变量来设计和运行的。JavaBean作为一个特殊的类,具有自己独有的特性。应该注意以下3个方面。

JavaBean类必须有一个没有参数的构造函数。

JavaBean类所有的属性最好定义为私有的。

JavaBean类中定义函数setXxx() 和getXxx()来对属性进行操作。其中Xxx是首字母大写的私有变量名称。

以上 转自:http://blog.csdn.net/zdwzzu2006/article/details/5151788

好 ,下面 是自己的学习总结

[java] view plaincopyprint?
  1. <span style="font-size:18px;">import java.beans.PropertyDescriptor;
  2. import java.lang.reflect.Method;
  3. public class IntroSpectorTest {
  4. /**
  5. * @param args
  6. * @throws Exception
  7. */
  8. public static void main(String[] args) throws Exception {
  9. ReflectPoint pt1 = new ReflectPoint(3, 5);
  10. String propertyName = "x";
  11. PropertyDescriptor pd = new PropertyDescriptor(propertyName, pt1.getClass());
  12. Method methodGetX = pd.getReadMethod();// 得到 X 属性的读方法。
  13. Object retVal = methodGetX.invoke(pt1);
  14. System.out.println(retVal);
  15. Method methodSetX = pd.getWriteMethod();// 得到 X 属性的读方法。
  16. methodSetX.invoke(pt1,9);
  17. System.out.println(pt1.getX());
  18. }
  19. }</span>

<span style="font-size:18px;">import java.beans.PropertyDescriptor; import java.lang.reflect.Method; public class IntroSpectorTest { /** * @param args * @throws Exception */ public static void main(String[] args) throws Exception { ReflectPoint pt1 = new ReflectPoint(3, 5); String propertyName = "x"; PropertyDescriptor pd = new PropertyDescriptor(propertyName, pt1.getClass()); Method methodGetX = pd.getReadMethod();// 得到 X 属性的读方法。 Object retVal = methodGetX.invoke(pt1); System.out.println(retVal); Method methodSetX = pd.getWriteMethod();// 得到 X 属性的读方法。 methodSetX.invoke(pt1,9); System.out.println(pt1.getX()); } }</span>

[java] view plaincopyprint?
  1. <span style="font-size:18px;">package com.itm.day1;
  2. import java.util.Date;
  3. public class ReflectPoint {
  4. private Date birthday = new Date();
  5. private int x;
  6. public int y;
  7. public String str1 = "ball";
  8. public String str2 = "basketball";
  9. public String str3 = "itcast";
  10. public ReflectPoint(int x, int y) {
  11. super();
  12. this.x = x;
  13. this.y = y;
  14. }
  15. @Override
  16. public int hashCode() {
  17. final int prime = 31;
  18. int result = 1;
  19. result = prime * result + x;
  20. result = prime * result + y;
  21. return result;
  22. }
  23. @Override
  24. public boolean equals(Object obj) {
  25. if (this == obj)
  26. return true;
  27. if (obj == null)
  28. return false;
  29. if (getClass() != obj.getClass())
  30. return false;
  31. final ReflectPoint other = (ReflectPoint) obj;
  32. if (x != other.x)
  33. return false;
  34. if (y != other.y)
  35. return false;
  36. return true;
  37. }
  38. @Override
  39. public String toString(){
  40. return str1 + ":" + str2 + ":" + str3;
  41. }
  42. public int getX() {
  43. return x;
  44. }
  45. public void setX(int x) {
  46. this.x = x;
  47. }
  48. public int getY() {
  49. return y;
  50. }
  51. public void setY(int y) {
  52. this.y = y;
  53. }
  54. public Date getBirthday() {
  55. return birthday;
  56. }
  57. public void setBirthday(Date birthday) {
  58. this.birthday = birthday;
  59. }
  60. }
  61. </span>

<span style="font-size:18px;">package com.itm.day1; import java.util.Date; public class ReflectPoint { private Date birthday = new Date(); private int x; public int y; public String str1 = "ball"; public String str2 = "basketball"; public String str3 = "itcast"; public ReflectPoint(int x, int y) { super(); this.x = x; this.y = y; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + x; result = prime * result + y; return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; final ReflectPoint other = (ReflectPoint) obj; if (x != other.x) return false; if (y != other.y) return false; return true; } @Override public String toString(){ return str1 + ":" + str2 + ":" + str3; } 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; } public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } } </span>
下面 利用重构:

结果如下:

[java] view plaincopyprint?
  1. <span style="font-size:18px;">import java.beans.IntrospectionException;
  2. import java.beans.PropertyDescriptor;
  3. import java.lang.reflect.InvocationTargetException;
  4. import java.lang.reflect.Method;
  5. public class IntroSpectorTest {
  6. /**
  7. * @param args
  8. * @throws Exception
  9. */
  10. public static void main(String[] args) throws Exception {
  11. ReflectPoint pt1 = new ReflectPoint(3, 5);
  12. String propertyName = "x";
  13. Object retVal = getProperty(pt1, propertyName);
  14. System.out.println(retVal);
  15. PropertyDescriptor pd2 = new PropertyDescriptor(propertyName, pt1.getClass());
  16. Method methodSetX = pd2.getWriteMethod();// 得到 X 属性的读方法。
  17. methodSetX.invoke(pt1,9);
  18. System.out.println(pt1.getX());
  19. }
  20. private static Object getProperty(ReflectPoint pt1, String propertyName)
  21. throws IntrospectionException, IllegalAccessException,
  22. InvocationTargetException {
  23. PropertyDescriptor pd = new PropertyDescriptor(propertyName, pt1.getClass());
  24. Method methodGetX = pd.getReadMethod();// 得到 X 属性的读方法。
  25. Object retVal = methodGetX.invoke(pt1);
  26. return retVal;
  27. }
  28. }</span>

<span style="font-size:18px;">import java.beans.IntrospectionException; import java.beans.PropertyDescriptor; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; public class IntroSpectorTest { /** * @param args * @throws Exception */ public static void main(String[] args) throws Exception { ReflectPoint pt1 = new ReflectPoint(3, 5); String propertyName = "x"; Object retVal = getProperty(pt1, propertyName); System.out.println(retVal); PropertyDescriptor pd2 = new PropertyDescriptor(propertyName, pt1.getClass()); Method methodSetX = pd2.getWriteMethod();// 得到 X 属性的读方法。 methodSetX.invoke(pt1,9); System.out.println(pt1.getX()); } private static Object getProperty(ReflectPoint pt1, String propertyName) throws IntrospectionException, IllegalAccessException, InvocationTargetException { PropertyDescriptor pd = new PropertyDescriptor(propertyName, pt1.getClass()); Method methodGetX = pd.getReadMethod();// 得到 X 属性的读方法。 Object retVal = methodGetX.invoke(pt1); return retVal; } }</span>
接着在对 set方法 重构,注意:这里修改了值,所以啊,要在另外设置一个变量,

定义为  Object  value  =  9.

[java] view plaincopyprint?
  1. <span style="font-size:18px;">import java.beans.IntrospectionException;
  2. import java.beans.PropertyDescriptor;
  3. import java.lang.reflect.InvocationTargetException;
  4. import java.lang.reflect.Method;
  5. public class IntroSpectorTest {
  6. /**
  7. * @param args
  8. * @throws Exception
  9. */
  10. public static void main(String[] args) throws Exception {
  11. ReflectPoint pt1 = new ReflectPoint(3, 5);
  12. String propertyName = "x";
  13. Object retVal = getProperty(pt1, propertyName);
  14. System.out.println(retVal);
  15. Object value = 9;
  16. setProperty(pt1, propertyName, value);
  17. System.out.println(pt1.getX());
  18. }
  19. private static void setProperty(ReflectPoint pt1, String propertyName,
  20. Object value) throws IntrospectionException,
  21. IllegalAccessException, InvocationTargetException {
  22. PropertyDescriptor pd2 = new PropertyDescriptor(propertyName, pt1.getClass());
  23. Method methodSetX = pd2.getWriteMethod();// 得到 X 属性的读方法。
  24. methodSetX.invoke(pt1,value);
  25. }
  26. private static Object getProperty(ReflectPoint pt1, String propertyName)
  27. throws IntrospectionException, IllegalAccessException,
  28. InvocationTargetException {
  29. PropertyDescriptor pd = new PropertyDescriptor(propertyName, pt1.getClass());
  30. Method methodGetX = pd.getReadMethod();// 得到 X 属性的读方法。
  31. Object retVal = methodGetX.invoke(pt1);
  32. return retVal;
  33. }
  34. }</span>

<span style="font-size:18px;">import java.beans.IntrospectionException; import java.beans.PropertyDescriptor; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; public class IntroSpectorTest { /** * @param args * @throws Exception */ public static void main(String[] args) throws Exception { ReflectPoint pt1 = new ReflectPoint(3, 5); String propertyName = "x"; Object retVal = getProperty(pt1, propertyName); System.out.println(retVal); Object value = 9; setProperty(pt1, propertyName, value); System.out.println(pt1.getX()); } private static void setProperty(ReflectPoint pt1, String propertyName, Object value) throws IntrospectionException, IllegalAccessException, InvocationTargetException { PropertyDescriptor pd2 = new PropertyDescriptor(propertyName, pt1.getClass()); Method methodSetX = pd2.getWriteMethod();// 得到 X 属性的读方法。 methodSetX.invoke(pt1,value); } private static Object getProperty(ReflectPoint pt1, String propertyName) throws IntrospectionException, IllegalAccessException, InvocationTargetException { PropertyDescriptor pd = new PropertyDescriptor(propertyName, pt1.getClass()); Method methodGetX = pd.getReadMethod();// 得到 X 属性的读方法。 Object retVal = methodGetX.invoke(pt1); return retVal; } }</span>
下面利用一复杂的方式:

[java] view plaincopyprint?
  1. <span style="font-size:18px;">// 利用 eclipse 的 重构方法。牛逼了。
  2. private static Object getProperty(Object pt1, String propertyName)
  3. throws IntrospectionException, IllegalAccessException,
  4. InvocationTargetException {
  5. /*PropertyDescriptor pd = new PropertyDescriptor(propertyName, pt1.getClass());
  6. Method methodGetX = pd.getReadMethod();// 得到 X 属性的读方法。
  7. Object retVal = methodGetX.invoke(pt1);*/
  8. // 复杂的方式:
  9. BeanInfo beanInfo = Introspector.getBeanInfo(pt1.getClass());
  10. PropertyDescriptor[] pds = beanInfo.getPropertyDescriptors();
  11. Object retVal = null;
  12. for(PropertyDescriptor pd : pds){
  13. if(pd.getName().equals(propertyName)){
  14. Method methodGetX = pd.getReadMethod();// 得到 X 属性的读方法。
  15. retVal = methodGetX.invoke(pt1);
  16. break;
  17. }
  18. }
  19. return retVal;
  20. }</span>

<span style="font-size:18px;">// 利用 eclipse 的 重构方法。牛逼了。 private static Object getProperty(Object pt1, String propertyName) throws IntrospectionException, IllegalAccessException, InvocationTargetException { /*PropertyDescriptor pd = new PropertyDescriptor(propertyName, pt1.getClass()); Method methodGetX = pd.getReadMethod();// 得到 X 属性的读方法。 Object retVal = methodGetX.invoke(pt1);*/ // 复杂的方式: BeanInfo beanInfo = Introspector.getBeanInfo(pt1.getClass()); PropertyDescriptor[] pds = beanInfo.getPropertyDescriptors(); Object retVal = null; for(PropertyDescriptor pd : pds){ if(pd.getName().equals(propertyName)){ Method methodGetX = pd.getReadMethod();// 得到 X 属性的读方法。 retVal = methodGetX.invoke(pt1); break; } } return retVal; }</span>

BeanUtils,以及java7的新特性。

[java] view plaincopyprint?
  1. <span style="font-size:18px;">package com.itm.day1;
  2. import java.beans.BeanInfo;
  3. import java.beans.IntrospectionException;
  4. import java.beans.Introspector;
  5. import java.beans.PropertyDescriptor;
  6. import java.lang.reflect.InvocationTargetException;
  7. import java.lang.reflect.Method;
  8. import org.apache.commons.beanutils.BeanUtils;
  9. import org.apache.commons.beanutils.PropertyUtils;
  10. public class CopyOfIntroSpectorTest2 {
  11. /**
  12. * @param args
  13. * @throws Exception
  14. */
  15. public static void main(String[] args) throws Exception {
  16. ReflectPoint pt1 = new ReflectPoint(3, 5);
  17. BeanUtils.setProperty(pt1, "x", "10");
  18. System.out.println(pt1.getX());
  19. System.out.println(PropertyUtils.getProperty(pt1, "x").getClass().getName());
  20. System.out.println("-------------------------------------");
  21. /*
  22. //java7的新特性
  23. Map map = {name:"zxx",age:18};
  24. BeanUtils.setProperty(map, "name", "lhm");
  25. */
  26. //  birthday.time
  27. BeanUtils.setProperty(pt1, "birthday.time", "111");
  28. System.out.println(BeanUtils.getProperty(pt1, "birthday.time"));
  29. }
  30. }
  31. </span>

<span style="font-size:18px;">package com.itm.day1; import java.beans.BeanInfo; import java.beans.IntrospectionException; import java.beans.Introspector; import java.beans.PropertyDescriptor; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import org.apache.commons.beanutils.BeanUtils; import org.apache.commons.beanutils.PropertyUtils; public class CopyOfIntroSpectorTest2 { /** * @param args * @throws Exception */ public static void main(String[] args) throws Exception { ReflectPoint pt1 = new ReflectPoint(3, 5); BeanUtils.setProperty(pt1, "x", "10"); System.out.println(pt1.getX()); System.out.println(PropertyUtils.getProperty(pt1, "x").getClass().getName()); System.out.println("-------------------------------------"); /* //java7的新特性 Map map = {name:"zxx",age:18}; BeanUtils.setProperty(map, "name", "lhm"); */ // birthday.time BeanUtils.setProperty(pt1, "birthday.time", "111"); System.out.println(BeanUtils.getProperty(pt1, "birthday.time")); } } </span>

下面是:变量本身的类型,而 BeanUtils 是可以类型转化的,这个不会。

PropertyUtils.setProperty(pt1, "x", 9);
System.out.println("PropertyUtils :" + PropertyUtils.getProperty(pt1, "x").getClass().getName());

运行结果:

PropertyUtils :java.lang.Integer

转载于:https://www.cnblogs.com/java-j2ee/archive/2012/05/08/2489812.html

javabean,BeanUtils以及 java7的新特性 .相关推荐

  1. Java7 一些新特性及脚本语言支持API--笔记

    1.switch条件语句中可以加入字符串了,实现方法是利用了字符串的hashcode()值作业真正的值 2.增加了一种可以在字面量中使用的进制,二进制,通过在数字前面加"0b"或& ...

  2. java7 nio2 新特性_JDK7新特性,你知道几个?

    前言 之前学习的过程中,每天都是老师说这个是JDK7以后可以使用,那个是JDK8以后可以使用,每天都记的很混乱,今天专门忙里偷闲,归拢整理下JDK7的新特性,对于JDK的新特性,后期会进行整理更新,希 ...

  3. Java5、Java6、Java7的新特性

    Java5 Java 5添加了8个语言特性:泛型,类型安全枚举,注解,自动装箱和拆箱,增强的循环,静态导入,可变参数,协变返回类型. 1.泛型 Generics: 引用泛型之后,允许指定集合里元素的类 ...

  4. java7 新特性 总结版

    Java7语法新特性: 前言,这是大部分的特性,但还有一些没有写进去,比如多核 并行计算的支持加强 fork join 框架:这方面并没有真正写过和了解.也就不写进来了. 1. switch中增加对S ...

  5. 【Java8新特性】面试官问我:Java8中创建Stream流有哪几种方式?

    写在前面 先说点题外话:不少读者工作几年后,仍然在使用Java7之前版本的方法,对于Java8版本的新特性,甚至是Java7的新特性几乎没有接触过.真心想对这些读者说:你真的需要了解下Java8甚至以 ...

  6. java mutilcatch_Java 7异常新特性之mutilcatch

    历经4年,Java7终于和大家见面.关于Java7的新特性,详见这里. Java7增强了Java的异常处理机制,主要表现为三个方面:捕捉多种异常类型(multicatch);重新抛出(rethrow) ...

  7. Java10的新特性

    Java语言特性系列 Java5的新特性 Java6的新特性 Java7的新特性 Java8的新特性 Java9的新特性 Java10的新特性 Java11的新特性 序 本文主要讲述一下Java10的 ...

  8. Java 7的新特性:文件监视器

    介绍一个Java7的新特性,文件监视器. /*** JavaSE7のファイル監視の実験* @author aegeanworkjp*/ public class FWatch_java7 implem ...

  9. java 可控异常_java异常处理,重新认识java异常,java7异常处理的新特性!

    原标题:java异常处理,重新认识java异常,java7异常处理的新特性! 在程序中,错误可能产生于程序员没有预料的各种情况,或者是超出了程序员可控范围的环境因素,如用户的坏数据.试图打开一个根本不 ...

最新文章

  1. allpairs使用方法_软件测试|正交试验测试用例设计方法
  2. html5中的dom中的各种节点的层次关系是怎样的
  3. python3.6sysos_Python 常用内置模块——sys、os
  4. CentOS 7磁盘分区及文件系统管理
  5. Visual Studio Online 东半球首秀,亮相 .NET Conf 2019 中国峰会
  6. 前端学习(499):水平居中布局得第一种方式得优点和缺点
  7. java并发集合面试题,那些经常被问的JAVA面试题(1)—— 集合部分
  8. 库克退休前将再推出一个新品类?可能是AR眼镜
  9. Python 数据结构与算法——快排
  10. 下十页分页php,织梦二次开发实现栏目分页前十页后十页功能
  11. 期货反向跟单的四大跟单禁忌
  12. 中科院SCI分区和JCR分区
  13. postman 配置参数自动签名
  14. 汽车厂VIN码生成软件
  15. windows xp 驱动开发(十八) USB驱动程序开发用到的工具总结
  16. 求菲波那切数列第n项
  17. 文件夹删不掉?有种文件夹叫 畸形文件夹
  18. 学计算机的目标作文,计算机学习计划作文三篇
  19. 192.168.2.0/24后面的/24表示什么意思
  20. 医疗时鲜资讯:在线问诊可否采用熟人推荐“模式

热门文章

  1. 近期题目整理2.0(递归和简单dfs)
  2. 向量空间与线性子空间
  3. 大数据毕设系列项目说明 【源码+论文】
  4. 使用Py6S计算瑞利反射率教程
  5. MacOS 开发 — NSOpenPanel NSSavePanel的使用
  6. 谷歌浏览器变成白色的解决方法
  7. 硬盘坏了数据可以恢复吗?一分钟掌握数据恢复
  8. 1.9 微信消息发送示例
  9. 【爬虫】关于爬取彼岸图网4K壁纸的分析
  10. RK3568平台开发系列讲解(LCD篇)DRM 显示框架