- 我是一个线程(修订版)
- 我是一个 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(下)
上一篇 提到 Java bean 的规范虽然定义的不错, 但却没有获得意料中的成功, 尤其是 Java 帝国所期待的桌面开发组件化市场上。
我和小码哥多么期待 CSDN 也能出一期《程序员大本营》, 里边包含成千上万的 java bean 组件啊。
不要幻想了, 赶紧把 java bean 应用在服务器端才是正事。 小码哥建议先用在 jsp 上试试, 可以用 java bean 来封装业务逻辑,保存数据到数据库, 像这样: 这几千个 JSP 就像这碗面条一样,搅在一起, 根本理不清楚。
为了解决这个问题,小码哥又推出了 :JSP Model 2 , 这是个模型真正的体现了 Model-View-Controller 的思想: Servlet 充当 Controller , jsp 充当 View Java bean 当然就是 Model 了!
业务逻辑, 页面显示, 和处理过程做了很好的分离。
基于这个模型的扩展和改进, 很多 Web 开发框架开始如雨后春笋一样出现, 其中最著名的就是 Struts, SpringMVC 了。
Java Web 开发迅速的繁荣了。
我们再一次体会到了开放的好处 ! 但是好景不长, 自从 Java 帝国统治了所谓的“企业级应用”开发领地, 各种各样的游行和抗议层出不穷: “我们要分布式” “我们要安全” “我们要事务”
“我们要高可用性” “......” 帝国分析了一下, 其实这些程序员的诉求可以归结为: “我们只想关注我们的业务逻辑, 我们不想, 也不应该由我们来处理‘低级’的事务, 多线程,连接池,以及其他各种各种的‘低级’API, 此外 Java 帝国一定得提供集群功能, 这样我们的一台机器死机以后,整个系统还能运转。 ”
我们不能坐着不管, 企业级应用是我们的命根子。 小码哥彻夜工作, 最终拿出了一个叫做 J2EE 的东西, 像 Java bean 一样, 这还是一个规范, 但是比 Java bean 复杂的多, 其中有:
JDBC : Java 数据库连接, 没有数据库的支持怎么能叫企业级应用?
JNDI : Java 命名和目录接口, 通过一个名称就可以定位到一个数据源, 连 jdbc 连接都不用了
RMI : 远程过程调用, 让一个机器上的 java 对象可以调用另外一个机器上的 java 对象 , 你们不是要分布式吗?
JMS : Java 消息服务, 可以使用消息队列了, 这不是企业级应用非常需要的吗?
JTA : Java 事务管理, 支持分布式事务, 能在访问、更新多个数据库的时候,仍然保证事务, 还是分布式。
Java mail : 收发邮件也是必不可少的啊。
刘欣注: J2EE 后来改成了 Java EE。
当然还有最最最重要的升级, 小码哥把 java bean 变成了 Enterprise Java bean , 简称 EJB 。
小码哥宣称: 使用了 EJB, 你就可以把精力只放在业务上了, 那些烦人的事务管理, 安全管理,线程 统统交给容器(应用服务器)来处理吧。
我们还提供了额外的福利, 只要你的应用服务器是由多个机器组成的集群, EJB 就可以无缝的运行在这个集群上, 你完全不用考虑一个机器死掉了应用该怎么办。我们都帮你搞定了。
使用 Session Bean , 可以轻松的处理你的业务。
使用实体 Bean (Entity bean ) , 你和数据库打交道会变得极为轻松, 甚至 sql 都不用写了。
使用消息驱动 Bean(Message Driven bean ) , 你可以轻松的和一个消息队列连接, 处理消息。
听起来很美好是不是?
企业级开发领地的程序员们欢呼雀跃, 坐上了 J2EE 这条船,似乎一下子高贵起来, 开始鄙视微软的 ASP, 开源的 PHP, Python 等“不入流”的语言了 。
Weblogic , Websphere 等符合 J2EE 规范的应用服务器趁势而上, 摇旗呐喊, 仿佛一个新的时代要来临了, 当然他们在背后一直闷声发大财。 有句古话是对的, 捧的越高, 跌的越惨。
很快,大部分的程序员就发现, 美好的前景并没有实现, EJB 中用起来极为繁琐和笨重, 性能也不好, 为了获得所谓的分布式,反而背上了沉重的枷锁。
实体 Bean 很快没人用了, 就连简单的无状态 Session bean 也被大家所诟病, 其中一条罪状就是“代码的侵入性”。
也是, 小码哥定义 EJB 的时候没考虑那么多,程序员在定义一个 Session bean 的时候,需要写一大堆和业务完全没有关系的类。
还需要被迫实现一些根本不应该实现的接口及其方法: 为了哪怕一点点业务逻辑, 我们都得写这么多无用的代码 ! 程序员们出离愤怒了!
他们发起了一场叫做 POJO (Plain Old Java Object) 的运动, 高唱这 POJO 之歌, 要求我们整改。
他们希望这个样子: public class HelloworldBean{ public String hello(){ return "hello world" } } 与此同时,他们还过分的要求保留事务了, 安全了这些必备的东西。
程序员确实不好伺候, 但是我们已经被 Weblogic, Websphere 这些大佬们“绑架”, 想改动谈何容易 !
2002 年, 小码哥看到了 Rod Johnson 写的一本书《Expert one on one J2EE development withoutEJB》 , 赶紧跑来找我: “老大, 坏了坏了, 你快看看这本书吧, 这个叫 Rod 的家伙写的这本书直击我们的命门,这厮要搞 without EJB” (注: 虽然这本书翻译的很差,但由于是 spring 的开山之作,还是值得读一下, 最好中英文对照)
岂止是 without EJB, 他还“偷偷的”推出了一个叫什么 Spring 的框架, 已经迅速的流行开了。
Spring 框架顺应了 POJO 的潮流, 提供了一个 spring 的容器来管理这些 POJO, 好玩的是也叫做 bean 。 看来我们的 java bean 走了一圈又回到了原点。
对于一个 Bean 来说,如果你依赖别的 Bean , 只需要声明即可, spring 容器负责把依赖的 bean 给“注入进去“, 起初大家称之为控制反转(IoC)
后来 Martin flower 给这种方式起来个更好的名字,叫“依赖注入”。
如果一个 Bean 需要一些像事务,日志,安全这样的通用的服务, 也是只需要声明即可, spring 容器在运行时能够动态的“织入”这些服务, 这叫 AOP。
后来我和小码哥商量, 我们 EJB 也学习 Spring , 简化开发和配置, 但是为时已晚, Spring 已经成为事实上的标准了!程序员已经被 spring 拉走了!
不过令我们欣慰的是, spring 和 spring mvc 极大的增加了我们对 web 开发领地的统治力, java 帝国更加强盛了。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论