使用Java Bean的优点是什么?
我相信我明白什么是Java Beans:包含无参数构造函数的Java类是可序列化的,并将它们的字段与getter和setter公开。
Java Bean是否必须公开其所有字段才能成为bean? 如果否,它甚至不得不公开任何?
可能Java Beans包含带有参数的构造函数以及无参数构造函数?
除了符合某种编码风格之外,Java Beans的目的是什么? 似乎有很多关于“豆类”或“豆类”的讨论,但我不知道为什么它们是有利的,具体而言。
我完全可以做出无参数的构造函数。 可能有很多原因,如果没有参数的构造函数可以帮助编译器做一些优化,我也不会感到惊讶。 我也可以理解让你的类可序列化。 即使课程从未被序列化,也可能是,并且追溯地做它可能会令人讨厌(或者在黑盒子图书馆中不可能)。
但最让人好奇的是要求所有字段都可以通过getter和setter访问。 当我需要它们时,我确实在自己的工作中使用了它们,但Java Beans要求它们(可能全部都取决于我对#1的回答)似乎很奇怪。 如果这是一个反思的问题,难道反射不能很容易地获得领域? 如果这不仅仅是简单地设置该值,而是如果该方法存在的话,那么该反射是否会在字段上使用getter / setter?
JavaBean本身并不是非常有趣,它只是一个符合上面列出的某些标准的Java类。 然而,符合这个标准是构建Java EE框架的支柱之一,它出现在不少地方。 我怀疑当你听说JavaBeans可以做的所有伟大的事情时,Enterprise JavaBeans(EJB)中提到的是什么。 仅供参考,下面列出了几种不同类型的EJB:
一些细节现在跟随...
实体豆
您可能想要读取/写入基础数据库的对象。 您可以使用JDBC / SQL来执行此操作,但您也可以使用持久性框架。 Java EE规范包含一个持久性规范,您可以将您的类声明为“实体bean”,并让Java自动生成数据库表和逻辑,以便在数据库中的条目和程序中的对象之间进行映射。 最初,持久性是需要使用应用服务器(如Glassfish,JBoss,Geronimo等)但AFAIK,你可以在没有服务器组件的桌面应用中使用它。 实际的实现由Eclipselink,Toplink,Hibernate等较低级别的库提供,但是Java API抽象出它们之间的任何差异。
有状态会话Bean
假设您想要创建一个存在于单独的JVM上的Java类的实例。 JVM可能在同一台物理机器上运行,但同样可能在不同的机器上通过网络进行通信。 使用Java EE应用程序服务器,您可以创建一个可由应用程序服务器的客户端实例化的类。 这些客户端可以实例化一个类,它将像普通对象那样工作,但是在对象上调用的任何方法都会在服务器上执行,并将结果传回给调用者。 它基本上是一个面向对象的远程过程调用形式。
无状态会话Bean
这是有状态会话bean的微小变化。 对于有状态bean,如果服务器有1000个客户端,那么它可能必须创建1000个bean实例并记住哪个实例属于哪个客户端。 使用无状态bean时,服务器创建一个bean池,并且不会记住哪个客户端拥有哪个bean。 当客户端调用方法时,服务器从池中选取一个bean并使用它,并在完成时将其返回给池。 当您希望服务器记住每个客户端的详细信息时,您可以使用有状态会话Bean,当您不需要记住客户端特定的详细信息时,您将使用无状态bean。 请注意,无状态bean可能具有状态,只是这个状态不会对客户感兴趣。
他们坚持明确的规范 。
由于这个,疯狂地有很多工具可以简化Javabeans的工作(或者相反)。 有一些工具可以基于某些特定风格的数据(XML,JSON,CSV,DDL等)和/或反之亦然自动生成它们,以及像Commons BeanUtils,Dozer,EZMorph等等一样读取/操作/映射它们。 此外,还有很多适用于Javabeans的MVC / ORM框架,比如JPA,Hibernate,JSF,Spring等。即使像Eclipse这样一些体面的IDE也知道如何基于某些字段自动生成Javabeans。
它是围绕Javabeans的工具和框架,它使我们的生活更轻松。 这是Javabeans规范使这些东西存在。
最重要的是,Java Bean是一个可重用的软件组件 。
这意味着它不与其他组件紧密耦合。 如果你的Java类创建了另一个类的实例,或者返回了一些特定的实现类,它就不再是一个bean。 豆类涵盖了一些定义明确的功能,并与其他类别松散耦合。
这样做的好处是,您可以轻松完成所有这些小工作,然后便可以一起工作。 此外,这些很容易重用和单元测试。
即使你没有使用一些可视化环境来耦合bean(就像bean规范所建议的那样),但这仍然是使用bean的一个理由:获得容易使用的小块代码。
如果你不使用可视化工具,那么你的bean有一个0参数的构造函数或者是可序列化的并不重要。
链接地址: http://www.djcxy.com/p/47649.html