java帝国复兴,Java Bean

## Visual Basic

Visual Basic在搞组件化开发,它有一个可视化编辑器

只需要把一个组件(按钮)拖拽到表单上,设置一下属性(颜色),再添加一个事件,最后在onClick里面写点代码就可以了。

## Java Bean API

定义了一套规范, 只要大家按照这个规范做, 谁都可以用 java 做出像 VB 那样的可视化开发工具出来

一个 java bean 其实就是一个普通的 java 类, 但我们对这个类有些要求

* 类是public的,然后需要有个无参数的构造函数

* 属性是private的,通过设置setXXX(),getXXX()来访问

* 能支持事件,例如 addXXXXListener(XXXEvent e), 事件可以是 Click 事件,Keyboard 事件等等

* 提供应该 反射机制,这样可以查看java bean的各种信息

* 可以序列化,可以保存在硬盘上

可以幻想一下,

* 创建JButton

有个用户在用一个 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 用户可以选取一个, 然后就可以写程序对这个事件编程了

## JSP Model1

Java bean 的规范虽然定义的不错, 但却没有获得意料中的成功, 尤其是 Java 帝国所期待的桌面开发组件化市场上。

那么能不能把Java Bean用到服务器端呢?

可以用 java bean 来封装业务逻辑,保存数据到数据库, 像这样:

![](http://p8a6vmhkm.bkt.clouddn.com/picgo20180815085834.png?picgo)

其中 jsp 直接用来接受用户的请求, 然后通过 java bean 来处理业务, 具体的使用方法是:

```

```

这就能把 HTTP request 中的所有参数都设置到 user 这个 java bean 对应的属性上去。

如果想偷懒, 还可以这样:

```

```

这个叫做 JSP Model 1 的模型受到了很多 Java 程序员的欢迎 , 因为他们的应用规模都很小, 用 Model 1 使得开发很快速。

实际上, 这种方式和微软帝国的 asp , 以及和开源的 php 几乎一样。

## JSP Model2

系统中有好几千个 jsp, 这些 jsp 互相调用 (通过 GET/POST), 到了最后调用关系无人能搞懂。就想一碗面条,搅在一起,理不清楚

为了解决这个问题,小码哥又推出了 :JSP Model 2 , 这是个模型真正的体现了 Model-View-Controller 的思想:

![](http://p8a6vmhkm.bkt.clouddn.com/picgo20180815090214.png?picgo)

Servlet 充当 Controller , jsp 充当 View ,Java bean 当然就是 Model 了!

很多 Web 开发框架开始如雨后春笋一样出现, 其中最著名的就是 Struts, SpringMVC 了。

## 企业级Java Bean

新的需求出现:

* 分布式

* 安全

* 事务

* 高可用性

可以归结为:

程序员只想关注我们的业务逻辑, 我们不想, 也不应该由我们来处理‘低级’的事务, 多线程,连接池,以及其他各种各种的‘低级’API, 此外 Java 一定得提供集群功能, 这样我们的一台机器死机以后,整个系统还能运转。 ”

最终拿出了一个叫做 J2EE 的东西, 像 Java bean 一样, 这还是一个规范, 但是比 Java bean 复杂的多, 其中有:

* JDBC:Java的数据库连接

* JNDI:Java命名和目录接口,通过一个名称可以定位到一个数据源

* RMI:远程过程调用,让一个机器上的Java对象可以调用另一个机器上的Java对象。

* JMS:Java消息服务,可以使用消息队列了。

* JTA:Java事务管理,支持分布式事务,可以在访问、更新多个数据库的时候保证事务的,而且还是分布式的。

* EJB:Java Bean变成了Enterprise Java Bean

使用了 EJB, 你就可以把精力只放在业务上了, 那些烦人的事务管理, 安全管理,线程 统统交给容器(应用服务器)来处理吧。

只要你的应用服务器是由多个机器组成的集群, EJB 就可以无缝的运行在这个集群上, 你完全不用考虑一个机器死掉了应用该怎么办。我们都帮你搞定了。

使用 Session Bean , 可以轻松的处理你的业务。

使用实体 Bean (Entity bean) , 你和数据库打交道会变得极为轻松, 甚至 sql 都不用写了。

使用消息驱动 Bean(Message Driven bean) , 你可以轻松的和一个消息队列连接, 处理消息。

Weblogic , Websphere 等符合 J2EE 规范的应用服务器趁势而上

## Spring

程序员发现EJB用起来非常的繁琐和笨重,为了所谓的分布式,背上了沉重的枷锁。

实体 Bean 很快没人用了, 就连简单的无状态 Session bean 也被大家所诟病, 其中一条罪状就是 “代码的侵入性”。

在定义一个Session Bean的时候,需要写一堆与业务没有关系的类。还需要被迫实现一些根本不应该实现的接口及其方法:

![](http://p8a6vmhkm.bkt.clouddn.com/picgo20180815090909.png?picgo)

Spring 框架提供了一个Spring 容器来管理Bean

对于一个 Bean 来说,如果你依赖别的 Bean , 只需要声明即可, spring 容器负责把依赖的 bean 给 “注入进去 “, 起初大家称之为控制反转 (IoC)

后来 Martin flower 给这种方式起来个更好的名字,叫 “依赖注入”。

如果一个 Bean 需要一些像事务,日志,安全这样的通用的服务, 也是只需要声明即可, spring 容器在运行时能够动态的 “织入” 这些服务, 这叫 AOP

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值