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. [Android] 使用Include布局+Fragment滑动切换屏幕

        前面的文章已经讲述了"随手拍"项目图像处理的技术部分,该篇文章主要是主界面的布局及屏幕滑动切换,并结合鸿洋大神的视频和郭神的第一行代码(强推两人Android博客),完毕了 ...

  2. Java8 List字符串 去重

    http://blog.csdn.net/jiaobuchong/article/details/54412094 public List<String> removeStringList ...

  3. 用python参加Kaggle的经验总结【转】

    用python参加Kaggle的经验总结 转载自:http://www.jianshu.com/p/32def2294ae6,作者 JxKing    最近挤出时间,用python在kaggle上试了 ...

  4. activiti Task

    UserTask ScriptTask ServiceTask MailTask ManualTask ReceiveTask BusinessRuleTask callActivity

  5. activiti主要API对象

    ProcessEngine         //流程引擎 RuntimeService      //与流程实例,执行对象(正在执行) TaskService           //正在执行任务 H ...

  6. Win7下使用无线网卡共享上网的4种方式

    我尝试了第一种直接上网了     一.Win7自带无线承载网络功能 1.查看网卡是否支持承载网络功能运行“命令提示符”   输入命令:netsh wlan show drivers图中红框“支持的承载 ...

  7. lua -- handler

    handler 将 Lua 对象及其方法包装为一个匿名函数. 格式: 函数 = handler(对象, 对象.方法) 在 quick-cocos2d-x 中,许多功能需要传入一个 Lua 函数做参数, ...

  8. Theories of Deep Learning

    https://stats385.github.io/readings Lecture 1 – Deep Learning Challenge. Is There Theory? Readings D ...

  9. [SQL Server 2014] SQL Server 2014新特性探秘

    SQL Server 2014新特性探秘(1)-内存数据库   简介 SQL Server 2014提供了众多激动人心的新功能,但其中我想最让人期待的特性之一就要算内存数据库了.去年我再西雅图参加SQ ...

  10. [Windows Azure] About Affinity Groups for Virtual Network

    Affinity groups are the way to group the services in your Windows Azure subscription that need to wo ...