PHP之所以被人称为“世界上最好的语言”,很大程度上是因为学会语法后就可以直接运用其开发Web应用了吧,而Java基本上不可能。在Java的语言特性的背后,还拖着由Sun公司和社区搞出的一大堆理论和框架,用以支撑所谓的“企业级开发”。有多少Java程序员终生淹没在“SSH”三大框架下,跳不出来。

这些理论,其实都很好,理论指导实践嘛!只是对于初学者来说,学习曲线比较陡峭。

JavaBeans是Java的JDK直接提供的一种组件式开发架构。具体的概念在此不详述了,有兴趣的直接看文档http://docs.oracle.com/javase/6/docs/api/java/beans/package-summary.html

在该文档中,简要阐述了JavaBeans的概念。同时,根据包结构,我们可以初步分析一下如果要用PHP来实现这样一个特性,需要写哪些代码。

接口

| [AppletInitializer] | 此接口设计用于与 java.beans.Beans.instantiate 联合使用。 |
| [BeanInfo] | 希望提供有关其 bean 的显式信息的 bean 实现者可以提供某个 BeanInfo 类,该类实现此 BeanInfo 接口并提供有关其 bean 的方法、属性、事件等显式信息。 |
| [Customizer] | customizer 类提供一个用来自定义目标 Java Bean 的完全自定义 GUI。 |
| [DesignMode] | 此接口由 java.beans.beancontext.BeanContext 的实例实现或委托,以便将当前的 "designTime" 属性传播到 java.beans.beancontext.BeanContextChild 实例的嵌套层次结构。 |
| [ExceptionListener] | ExceptionListener 是在发生内部异常时获得通知。 |
| [PropertyChangeListener] | 无论 bean 何时更改 "bound" 属性,都会激发一个 "PropertyChange" 事件。 |
| [PropertyEditor] | PropertyEditor 类为希望允许用户编辑某个给定类型的属性值的 GUI 提供支持。 |
| [VetoableChangeListener] | 只要 bean 更改 "constrained" 属性,都将会激发一个 VetoableChange 事件。 |
| [Visibility] | 在某些情况下,bean 可能运行在 GUI 不可用的服务器上。 |

| [BeanDescriptor] | BeanDescriptor 提供有关 "bean" 的全局信息,其中包括其 Java 类、其 displayName 等等。 |
| [Beans] | 此类提供一些通用的 bean 控制方法。 |
| [DefaultPersistenceDelegate] | DefaultPersistenceDelegatePersistenceDelegate 抽象类的具体实现,是没有关于其可用信息的类在默认情况下使用的委托。 |
| [Encoder] | Encoder 是这样的类,它可用于创建根据其公共 API 对 JavaBeans 集合状态进行编码的文件或流。 |
| [EventHandler] | EventHandler 类为动态生成事件侦听器提供支持,这些侦听器的方法执行一条涉及传入事件对象和目标对象的简单语句。 |
| [EventSetDescriptor] | 描述给定 Java bean 激发的一组事件的 EventSetDescriptor。 |
| [Expression] | Expression 对象表示基本表达式,其中将单个方法应用于某一目标和一组参数,以返回结果,与在 "a.getFoo()" 中一样。 |
| [FeatureDescriptor] | FeatureDescriptor 类是 PropertyDescriptor、EventSetDescriptor 和 MethodDescriptor 等的公共基类。 |
| [IndexedPropertyChangeEvent] | 无论何时遵守 JavaBeans 规范的组件("bean")更改绑定 (bound) 索引 (indexed) 属性,都会提交一个 "IndexedPropertyChange" 事件。 |
| [IndexedPropertyDescriptor] | IndexedPropertyDescriptor 描述了类似数组行为的属性,且有一种访问数组特定元素的索引读和/或索引写方法。 |
| Introspector | Introspector 类为通过工具学习有关受目标 Java Bean 支持的属性、事件和方法的知识提供了一个标准方法。 |
| MethodDescriptor | MethodDescriptor 描述了一种特殊方法,即 Java Bean 支持从其他组件对其进行外部访问。 |
| ParameterDescriptor | ParameterDescriptor 类允许 bean 实现者提供除 java.lang.reflect.Method 类提供的低级别信息之外的关于其每个参数的额外信息。 |
| PersistenceDelegate | PersistenceDelegate 类负责根据类的公共 API 中的方法表示给定类的实例状态。 |
| PropertyChangeEvent | 无论 bean 何时更改 "bound" 或 "constrained" 属性,都会提交一个 "PropertyChange" 事件。 |
| PropertyChangeListenerProxy | 扩展 EventListenerProxy 的类,特别适用于添加指定的 PropertyChangeListener。 |
| PropertyChangeSupport | 这是一个实用工具类,支持绑定 (bound) 属性的 bean 可以使用该类。 |
| PropertyDescriptor | PropertyDescriptor 描述 Java Bean 通过一对存储器方法导出的一个属性。 |
| PropertyEditorManager | PropertyEditorManager 可用于查找任何给定类型名称的属性编辑器。 |
| PropertyEditorSupport | 这是一个帮助构建属性编辑器的支持类。 |
| SimpleBeanInfo | 这是一个使得用户提供 BeanInfo 类更容易的支持类。 |
| Statement | Statement 对象表示基本语句,其中将单个方法应用于某一目标和一组参数,以返回结果,比如 "a.setFoo(b)"。 |
| [VetoableChangeListenerProxy] | 扩展 EventListenerProxy 的类,特别适用于将 VetoableChangeListener 与 "constrained" 属性相关联。 |
| [VetoableChangeSupport] | 这是一个实用工具类,支持约束 (constrained) 属性的 bean 可以使用此类。 |
| [XMLDecoder] | XMLDecoder 类用于读取使用 XMLEncoder 创建的 XML 文档,用途类似于 ObjectInputStream。 |
| [XMLEncoder] | XMLEncoder 类是 ObjectOutputStream 的互补替换,可用于生成 JavaBean 的文本表示形式,所使用方式与用 ObjectOutputStream 创建 Serializable 对象的二进制表示形式的方式相同。 |

异常

| [IntrospectionException] | 在 Introspection 期间发生异常时抛出异常。 |
| [PropertyVetoException] | 当某一属性的提议更改表示一个不可接受的值时,将抛出 PropertyVetoException。 |

注解类型

| [ConstructorProperties] | 关于构造方法的注释,用来说明该构造方法的参数如何与被构造对象的获取方法相对应。 |

参照这个结构,有没有兴趣实现一套PHPBeans?在正统的基于类的面向对象的思维下,语言的界限可以试着去消除,尤其PHP已经进步了这么多。

不知道markdown的表格语法为什么没有识别出来,效果有点差。

Beans的更多相关文章

  1. 可爱的豆子——使用Beans思想让Python代码更易维护

    title: 可爱的豆子--使用Beans思想让Python代码更易维护 toc: false comments: true date: 2016-06-19 21:43:33 tags: [Pyth ...

  2. beans.xml

    <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...

  3. 【解决方案】 org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userHandler': Injection of resource dependencies failed;

    一个错误会浪费好多青春绳命 鉴于此,为了不让大家也走弯路,分享解决方案. [错误代码提示] StandardWrapper.Throwableorg.springframework.beans.fac ...

  4. 利用beans.xml进行简单的Spring应用上下文创建与使用

    继上次配置Spring完成后,我们来创建一个简单的例程来理解Spring中利用beans.xml创建应用上下文的方法. 程序路径包为:com.spring.kinghts(kinght单词拼写错误,怕 ...

  5. Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener org.springframework.beans.factory.BeanCreationException:

    严重: Exception sending context initialized event to listener instance of class org.springframework.we ...

  6. [转]spring beans.xml

    <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...

  7. XML中<beans>中属性概述

    <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w ...

  8. java beans

    There are N little kids sitting in a circle, each of them are carrying some java beans in their hand ...

  9. Hdu 2845 Beans

    Beans Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

  10. spring beans

    所 有 使 用 XML 文 件 进 行 配 置 信 息 加 载 的 Spring IoC 容 器 , 包 括 BeanFactory 和ApplicationContext的所有XML相应实现,都使用 ...

随机推荐

  1. PHP基本的语法以及和Java的差别

    .表示字符串相加 ->同Java中的. $作为变量的前缀,除此之外.变量名称定义规则同Java 參数传递和方法返回时传引用须要加前缀& 演示样例代码: function f(&$ ...

  2. 适合移动端与PC端的 CSS Reset - m_base.css

    文章来源:http://www.cnblogs.com/HCJJ/p/6399185.html 具体代码 @charset "utf-8"; html { -ms-text-siz ...

  3. [转]gdb调试多进程和多线程命令

    1. 默认设置下,在调试多进程程序时GDB只会调试主进程.但是GDB(>V7.0)支持多进程的分别以及同时调试,换句话说,GDB可以同时调试多个程序.只需要设置follow-fork-mode( ...

  4. 收集一些有意思的ASCII程序注释(持续收集中,希望大家踊跃贡献)

      /** * * created by Mr.Simple, Aug 21, 20141:51:40 PM. * Copyright (c) 2014, hehonghui@umeng.com Al ...

  5. Hadoop Map/Reduce 示例程序WordCount

    #进入hadoop安装目录 cd /usr/local/hadoop #创建示例文件:input #在里面输入以下内容: #Hello world, Bye world! vim input #在hd ...

  6. PHP的生成器、yield和协程

    虽然之前就接触了PHP的yield关键字和与之对应的生成器,但是一直没有场景去使用它,就一直没有对它上心的研究.不过公司的框架是基于php的协程实现,觉得有必要深入的瞅瞅了. 由于之前对于生成器接触不 ...

  7. 用Entityframework 调用Mysql时,datetime格式插入不进去数据库的解决办法。

    1. 打开Model.edmx, 2. 选择userinfo中的createtime字段的属性 3. storegeneratedpattern设置值为None

  8. amazon建立基于centos的ec2

    在amazon上建立centos系统的ec2,主要就是系统要找对. 1.登录网址:amazonaws-china.com,注意这个网址是专门为在国内建立国外通用亚马逊ec2设立的,其他的是用国内的ec ...

  9. 浏览器中beforeunload的使用

    打开一些慢的网站的时候只见浏览器在不停转圈,但是页面还停留在当前页面的,有些网站的效果是你点击链接要跳到另一个页面的时候,在当前页面弹出一个框提示“正在加载中....”, 用到了浏览器的beforeu ...

  10. Eclipse Axis2 插件将代码生成WSDL指南

    Eclipse Axis2 插件将代码生成WSDL指南 快速学习手册 开发工具:https://spring.io/tools 插件地址:http://axis.apache.org/axis2/ja ...