- 我是一个线程(修订版)
- 我是一个 Java class
- Javascript:一个屌丝的逆袭
- Java : 一个帝国的诞生
- JSP 一个装配工的没落
- TCP/IP 之 大明王朝邮差
- TCP/IP 之大明内阁
- TCP/IP 之蓟辽督师
- CPU 阿甘
- CPU 阿甘之烦恼
- CPU 阿甘:函数调用的秘密
- 我是一个网卡
- 我是一个路由器
- 我是一个进程
- 我是一块硬盘(上)
- 我是一块硬盘(下)
- 我是一个键盘
- 张大胖的 socket
- 张大胖学递归
- 学习面向对象的令狐冲
- 张大胖学数据库
- 数据库村的旺财和小强
- 小李的数据库之旅(上)
- 小李的数据库之旅(下)
- 漫画:什么是机器学习?
- 那些烦人的同步和互斥问题
- IE 为什么把火狐和 Chrome 给打伤了?
- 对浏览器村的第二次采访
- 节约标兵 IE 的自述
- EMail 诞生记
- Email 诞生记(下)
- Http 历险记(上)
- Http 历险记(下)-- Struts 的秘密
- 动物王国的面向对象
- 冯·诺伊曼计算机的诞生
- Http Server : 一个差生的逆袭
- 张大胖的加法器
- 从 1 加到 100:一道简单的数学题挑战下你的大脑
- 编程语言
- Javascript:一个屌丝的逆袭
- 计算机语言之战
- 我和编程语言的爱恨情仇(上)
- 我和编程语言的爱恨情仇(下)
- Android 为什么选择了 Java
- iOS 为什么选择了 Object-C?
- Basic : 一个老兵的自述
- Node.js : 我只需要一个店小二
- 命令式编程 vs 声明式编程
- 编译还是解释?
- 程序人生
- “架构师"小赵
- 师兄说
- 师姐说
- 小王的架构师之路
- 小李的版本管理系统
- 小超穿越记
- 小李的 Build 之路(上)
- 小李的 Build 之路(下)
- 张大胖改 Bug
- 我的编程之路--大学趣事
- 码农小王的一天
- 小李在外企
- 张大胖的需求估算
- 从厨师到码农
- 聊一聊那些神一样的程序员们(上)
- 聊一聊那些神一样的程序员们(中)
- 聊一聊那些神一样的程序员们(下)
- 谁是互联网之父?
- 一个价值百万的创业教训
- 让自己与众不同 - 提升工作的价值
- 看看你的“易燃性”
- 从无聊的工作中寻找价值
- 什么样的学生适合报考计算机?
- 谈谈程序员的职业方向(上)
- 谈谈程序员的职业方向(中)
- 谈谈程序员的职业方向(下)
- 谈谈培训班的作用
- 码农需要知道的“潜规则”
- 学习编程的加速度
- 码农在工作中的必备能力
- 码农和英语
- 老司机经验
- 假如时光能够倒流, 我会这么学习 Java
- 假如我是计算机系老师
- 学会编程, 而不是学会 Java
- 从增删改查中突围
- 抽象:程序员必备的能力
- 懒就一个字
- 编程的自学方法
- 小王买房记
- 从一道面试题谈谈一线码农应该具备的基本素质
- 想写框架的看过来
- 苹果手机变砖头以后
- 如何快速的学习一门技术?
- 唯一不变的是变化: 谈谈微信应用号
- 什么是企业应用?
- 勿以浮沙筑高台
- 为什么敏捷开发难于成功?
- localhost vs 127.0.0.1
- GitHub/Stackoverflow 找工作时有什么用?
- 动词 or 名词 :这是一个问题
- 如何选择入行语言
- 有时候,沉默是金
- 零 Bug 的代码是怎么炼成的?
- 浮点数为什么不精确?
- 文章错误大全
- Open Source--不要为了开源而开源
- 一不留神,代码就腐化了
- 先做个“键盘侠”, 再来写程序
- 不加断点调试的程序员是好程序员
- 码农必备技能:烂代码的处理之道(上)
- 码农必备技能:烂代码的处理之道(下)
- 学习数据结构有用吗?
- 从现在开始,丰富你的简历
- 那些永不过时的书,你看过几本吗?
- 学好编程必备的一个品质你知道吗?
- 你最爱的 Java
- 搞懂了这几点,你就学会了 Web 编程
- Spring 的本质系列(1) -- 依赖注入
- Spring 本质系列(2)-AOP
- 三层架构和 MVC 那点事儿
- Java 帝国之拨云见日识回调
- 小张的 Duck Typing
- JDBC 的诞生
- JDBC 后传
- 一个不安分的 JDBC 驱动
- Java 帝国之 Java bean (上)
- Java 帝国之 Java bean(下)
- Java 帝国之函数式编程
- Java 帝国之函数式编程(下)
- 关于 Java 初学者需要知道的 10 件事
- JUnit 你不知道的那些事儿
- 圣诞礼物:Java EE 的历史
- Java EE 读书指南
- 给小白的 Java EE 指南
- 给小白的 Java EE 指南(2)
- 给小白的 Java EE 生存指南(3) : XML
- 给小白的 Java EE 生存指南(4) : 一只叫 Tom 的猫
- 给小白的 Java EE 指南(5) : AJAX
- 给小白的 Java EE 生存指南(6) :Java 反射
- 闲聊
- "饿了么"初体验
- 来自大脑的控诉
- 一个高中生是怎么玩自媒体的?
- 尝试 分答
- 到底应不应该上培训班?
- 自学编程中遇到问题怎么办?
- 据说 99%的初级程序员看完后都不迷茫了
- 一行代码引发的“血案”
- 对一个死锁问题的思考
- 通过外包进入名企
- 请开往十年前的今天
- 为什么自学中最好有个师傅指导一下?
- 这个网站值得你花时间投入
- 为什么你无法坚持自学编程?
Java 帝国之 Java bean (上)
前言: 最近看到到 spring 的 bean 配置, 突然想到可能很多人不一定知道这个叫 bean 的东西的来龙去脉, 所以就写个文章来讲一下。
另外,上次出了开源中国抄袭事件 , 为了防止转载以后我的公众号信息被故意删除, 我在文章的内容中加上了一些 刘欣 这样的字样, 可能会造成一些烦扰, 请见谅。 我一手创立的 Java 帝国刚刚成立不久,便受到巨大的打击, 我派出去占领桌面开发的部队几乎全军覆没。
情报说微软的 Visual Basic 和 Borland 的 Delphi 最近在宣传什么组件化开发, 难道就是这东西把我们搞垮了?
我赶紧买了一个 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 在统治了服务器端的编程, 还是在那里想想办法吧......
未完待续。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论