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购物车程序

    实用的php教程购物车程序以前有用过一个感觉不错,不过看了这个感觉也很好,所以介绍给需要的朋友参考一下. <?php//调用实例require_once 'cart.class.php';ses ...

  2. C++中的#和##运算符

    #和##运算符 #:构串操作符 构串操作符#只能修饰带参数的宏的形参,它将实参的字符序列(而不是实参代表的值)转换成字符串常量 #define STRING(x) #x#x#x #define TEX ...

  3. 转 kafka架构简介

    kafka架构 转 http://www.cnblogs.com/chushiyaoyue/p/5612298.html 相关文章: https://www.jianshu.com/p/6233d53 ...

  4. yml配置文件

    1 yaml配置文件中是以空格来区分是否是同一层级.在键值对的冒号之后要有空格. 2 属性值:数值.字符串.bool 值,直接写即可.双引号会将特殊字符进行转义,例如:"nice \n go ...

  5. redis PUB/SUB(发布/订阅)

    PSUBSCRIBE订阅一个或多个符合给定模式的频道 PUBLISH将信息message 发送到指定的频道channel PUBSUB是一个查看订阅与发布系统状态的内省命令 PUBSUB CHANNE ...

  6. 关于Big Endian 和 Little Endian

    Big Endian 和 Little Endian 一.字节序 来自:http://ayazh.gjjblog.com/archives/1058846/ 谈到字节序的问题,必然牵涉到两大CPU派系 ...

  7. unity, 删除animationClip中的position曲线

    删除clip中所有的position曲线: using UnityEngine; using System.Collections; using UnityEditor; public class r ...

  8. Eclipse maven问题汇总

    在使用eclipse+maven的过程中,遇到一系列问题,先汇总记录如下: 1. 在java工程中,缺少Maven依赖: 这个问题比较棘手,一般都对eclispe的工程结构不是很了解,后来经过长时间的 ...

  9. Windows搭建测试RabbitMq遇到的问题

    报错: d:\Program Files\RabbitMQ Server\rabbitmq_server-3.6.5\sbin>rabbitmq-plugins eble rabbitmq_ma ...

  10. Spark学习笔记之-Spark远程调试

    Spark远程调试                          本例子介绍简单介绍spark一种远程调试方法,使用的IDE是IntelliJ IDEA.   1.了解jvm一些参数属性   -X ...