前言: 最近看到到spring 的bean 配置, 突然想到可能很多人不一定知道这个叫bean的东西的来龙去脉, 所以就写个文章来讲一下。

我一手创立的Java帝国刚刚成立不久,便受到巨大的打击, 我派出去占领桌面开发的部队几乎全军覆没。 
情报说微软的Visual Basic 和Borland的Delphi最近在宣传什么组件化开发, 难道就是这东西把我们搞垮了? 
刘欣(微信公众号:码农翻身)注:参见《 Java :一个帝国的诞生》和《 Basic: 一个老兵的自述》

我赶紧买了一个Visual Basic 过来研究, 果然,这个家伙确实是方便, 最让我惊叹的是: 它有一个可视化编辑器 ! 
我只需要把一个组件(例如按钮)拖拽到可一个表单上,  设置一下属性 (颜色,字体), 再添加一个事件(onClick), 最后在onClick中写点代码就搞定了 !
不仅如此,我自己也可以把我的代码按规范包装成一个组件, 发布出去让别人使用。
我看着手下给我买来的《程序员大本营》光盘, 里边竟然包含了好几千个这样的组件, 有数据库浏览组件, 计时器组件, 颜色选取组件, 甚至还有收发邮件的组件......
天哪, 这以后开发桌面程序岂不太简单了 !
怪不得我的Java 被打得满地找牙!
刘欣(微信公众号:码农翻身)注: 90年代末的程序员和学生估计都知道《程序员大本营》, 由csdn的创始人蒋涛制作。
我赶紧打电话给我的干将小码哥 : 小码啊, 你赶紧看看这个Visual Basic 和Delphi , 给你7天时间, 我们Java 也得赶紧搞一套这样的东西出来。
小吗毫不含糊, 三天就给我搞了一个东西出来: Java Bean API 规范 。
我翻开一看, 哇塞, 长达114页 , 于是问他:“这是什么东西? 我要的可视化编辑器呢Visual Java 呢? ”
刘欣(微信公众号:码农翻身)注: 我下载浏览了java bean 的规范, 确实是114页
他说: “老大, 我们是个开源的社区, 得充分利用大家的力量, 所以我没有去做像VB和Delphi那样的东西, 相反,我定义了一套规范, 只要大家按照这个规范做, 谁都可以用java 做出像VB那样的可视化开发工具出来。”
“那你说说这个java bean 到底是什么规范?”我问。
“首先,一个java bean 其实就是一个普通的java 类, 但我们对这个类有些要求: 
1. 这个类需要是public 的, 然后需要有个无参数的构造函数
2. 这个类的属性应该是private 的, 通过setXXX()和getXXX()来访问
3. 这个类需要能支持“事件”, 例如addXXXXListener(XXXEvent e),  事件可以是Click事件,Keyboard事件等等, 当然咱们也支持自定义的事件。 
4. 我们得提供一个所谓的自省/反射机制, 这样能在运行时查看java bean 的各种信息“
5. 这个类应该是可以序列化的, 即可以把bean的状态保存的硬盘上, 以便以后来恢复。

“这些要求看起来也没啥啊,对程序员来说,不就是个普通的java 类吗? 到底该怎么用? ” 
“我们幻想一下,假设我们的Java bean 大行其道了, 有个用户在用一个Visual Java Builder  这样的可视化开发工具, 当他用这个工具创建应用的时候, 可以选择一个叫JButton的组件, 加到一个表单上, 此时Visual Java Builder 就需要把这JButton的类通过反射给new 出来, 所以就需要一个无参数的构造函数了。”
“如果用户想去设置一下这个JButton的属性,Visual Java Builder 就需要先用自省/反射来获取这个JButton有哪些属性(通过getter/setter), 拿到以后就可以给用户显示一个 属性清单了, 例如背景色, 字体 等等。 用户看到后就可以设置背景色和字体了,  此时Visual Java Builder 在内部就需要调用这个Bean的setBackgroundCorlor()/setFont() 等方法, 这就是所谓的setXXXX()方法。”
“如果用户想对这个JButton编程, Visual Java Builder 还是通过自省/反射来获取这个JButton有哪些事件, 给用户展示一个 事件清单,例如click , keyboardPressed  用户可以选取一个, 然后就可以写程序对这个事件编程了。”
“可是那个序列化有什么用呢?”
“这是因为用户设计完了以后,可能关掉Visual Java Builder 啊 , 如果不通过序列化把设计好的JButton保存起来, 下次再打开Visual Java Builder , 可就什么都没有了”
我想了想, 小码哥设计的不错,仅仅用了一个简单的规范就满足了可视化编辑器的所有要求。

"那我们就发布这个规范吧, 咱们自己先做一个可视化编辑器,给别人做个榜样, 名称我都想好了, 叫 NetBean吧。"
刘欣(微信公众号:码农翻身)注:这是我杜撰的, 实际上NetBean这个名称可能和java bean 并没有实际关联。

果然不出我们所料, Java bean 发布以后, 有力的带动了Java 的IDE市场,  开发Delphi的Borland公司 也来插了一脚,搞出了一个JBuilder, 风靡一时。 
IBM 搞了一个Visual Age for Java ,  后来摇身一变, 成了一个叫Eclipse的开放平台,超级受大家欢迎, 它反过头来把我们的Netbean 和 JBuilder 逼的快没有活路了。 
虽然我们玩的很欢,但是程序员根本不买账, Java 在桌面开发市场还是没有起色,使用Java bean 创建桌面程序的程序员少之又少, 只有部分像金融、ERP这样的领地还在坚持。   
看来是无药可救了。 
但是Java bean 何去何从 ? 丢弃掉太可惜了,   我和小码哥商量了一下, 我们觉得: 既然我们Java在统治了服务器端的编程, 还是在那里想想办法吧......
未完待续。

Java 帝国之Java bean上相关推荐

  1. 揭秘 Java帝国的全能家族——Spring的成王之路

    很久很久以前,古老的 Java 编程帝国里降生了一个孩子,名为 Spring,它是 Java 帝国最小的王子,同时也是 Java 帝国期待已久的孩子. 它还有三个哥哥,分别是大哥 JSF.二哥 Str ...

  2. Java帝国对Python的渗透能成功吗?

    作者 | 刘欣 转载自码农翻身(公众号 ID:coderising) 引子 Java 帝国已经成立 20 多年,经过历代国王的励精图治,可以说是地大物博,码农众多. 可是国王依然不满足,整天想着如何继 ...

  3. 神秘使者到 Java 帝国传道协程,竟被轰了出去!

    作者 | 轩辕之风O 来源 | 编程技术宇宙(ID:xuanyuancoding) 头图 |  CSDN 下载自东方IC 神秘使者 "久闻Java语言跨越平台,框架众多,不过二十年功夫,就已 ...

  4. Java 帝国之消息队列

    张家村的历史 Java 帝国的张家村正在迎来一次重大的变革. 5年前网上购物兴起的时候, 帝国非常看好, 决定向这个领域进军, 于是兴建了张家村, 在这里安装了Java 虚拟机和数据库, 然后部署了一 ...

  5. 邪恶的Java帝国是怎么欺负小函数的?

    1 小函数的运气不好,投胎到了邪恶的Java帝国,一出生就被告知了自己的悲惨地位,以及未来的悲惨人生:奴隶. 确切地说,是类的奴隶. 在Java帝国, 国王特别喜欢"类", 不待见 ...

  6. java jax-rs_在Java EE 7和WildFly中使用Bean验证来验证JAX-RS资源数据

    java jax-rs 我过去已经两次接触过这个主题. 首先,在我的文章< 在Java EE 6中将Bean验证与JAX-RS集成>中 ,描述了甚至在Java EE平台规范中尚未定义之前, ...

  7. Java EE状态会话Bean(EJB)示例

    在本文中,我们将了解如何在简单的Web应用程序中使用状态会话Bean来跟踪客户端会话中的状态. 1.简介 有状态会话Bean通常保存有关特定客户端会话的信息,并在整个会话中保留该信息(与无状态会话Be ...

  8. JAVA翻译官_Java开发笔记(三)Java帝国的特种官吏

    上一篇文章介绍了Java工程的帝国区划,末尾给出了一段Java代码例子,这个代码虽然勉强能看懂,但是有些细节令人不甚了了.比如说"// 参观朱雀台"为何能够直接跟在当前行后面?&q ...

  9. java spring配置类_spring 配置 Java配置类装配bean

    https://www.cnblogs.com/chenbenbuyi/p/8457700.html 自动化装配的确有很大的便利性,但是却并不能适用在所有的应用场景,比如需要装配的组件类不是由自己的应 ...

最新文章

  1. 百万级访问量网站的技术准备工作[转帖]
  2. FuncT、ActionT 的区别于说明
  3. jQuery中的closest()和parents()的差别
  4. Win10修改防火墙入站规则
  5. TensorFlow学习之——checkpoints
  6. 面试:InnoDB 并发控制
  7. Ubuntu 通过Deb 安装 MySQL 5.5 [转载]
  8. SSH+Oracle10G抛Disabling contextual LOB creation as createClob() m
  9. vivo X30 5G版现身Geekbench:搭载三星Exynos 980
  10. 禁止logback输出状态信息
  11. 一个关于 UIPickerView 的 bug
  12. Mac勿扰模式使用技巧
  13. 色斑图制作及后端无人值守自动出图kriging.js+chrome+html2canvas.js+DOS+BIGEMAP超低成本实现气象要素色斑图
  14. wav转mp3,wav转换成mp3
  15. CRM客户管理系统-SSM框架项目实战教程
  16. 人人商城商品分享码添加用户的头像和昵称
  17. focal loss详解
  18. Outlook关闭时最小化到任务栏的完美解决方法
  19. 2022年,计算机er保研选计科还是电信?
  20. C++中的运算符和运算符优先级总结

热门文章

  1. AMD锐龙7000系列CPU命名混乱?三分钟帮你看明白
  2. 您的系统存在未授权的Bluetooth适配器,拔除或禁用该设备(蓝牙问题)
  3. RabbitMQ消息确认机制-可靠抵达
  4. 网站网页快速变灰方法
  5. 一个绝对有用的网站!
  6. 【人工智能 AI】机器学习快速入门教程(Google)
  7. 『关于摄影的前后期』
  8. alpha shapes提取边界原理及详细步骤
  9. Linux 文本对比 diff
  10. C#中TreeView树配图片