我不是Java开发人员,所以可能会说错一些术语...
我要集成的一个应用正在从Spring转向Wicket。虽然这不应该影响我的集成,但我想知道他们为什么要这样做?
据我所知,Spring是更受欢迎的框架。除了它很受欢迎之外,我对它一无所知。我确实阅读了Wicket页面,Wicket似乎非常简单和直观。
Wicket有哪些优点?
在我看来,改变整个框架需要做一些工作,因此我想知道Wicket是否提供了Spring没有的东西?
我不是Java开发人员,所以可能会说错一些术语...
我要集成的一个应用正在从Spring转向Wicket。虽然这不应该影响我的集成,但我想知道他们为什么要这样做?
据我所知,Spring是更受欢迎的框架。除了它很受欢迎之外,我对它一无所知。我确实阅读了Wicket页面,Wicket似乎非常简单和直观。
Wicket有哪些优点?
在我看来,改变整个框架需要做一些工作,因此我想知道Wicket是否提供了Spring没有的东西?
在我经常出入的圈子里,经常被吹捧的优点包括:
POJO 组件模型
Wicket 中的页面和组件都是真正的 Java 对象,支持封装、继承和事件。
易于开发
由于 Wicket 是 Java 和 HTML 相结合,因此您可以利用自己已经掌握的 Java 或喜欢的 HTML 编辑器来编写 Wicket 应用程序。
关注点分离
Wicket 不会将标记语言与 Java 代码混在一起,并且不会向标记文件中添加任何特殊的语法。HTML 和 Java 的世界是并行的,它们只通过 Wicket ID 进行关联。这些 ID 是 HTML 的属性,也是 Java 组件的属性。由于 Wicket HTML 就是普通的 HTML,Wicket Java 就是普通的 Java,程序员和设计师可以相对独立地工作,而无需依赖任何特殊的工具。
安全性
Wicket 默认是安全的。URL 不会暴露敏感信息,所有组件路径都是相对于会话的。必须采取明确的步骤才能在会话之间共享信息。此外,URL 加密可以实现高度安全的网站。
透明、可扩展的集群支持
所有 Wicket 应用程序都将自动在集群上工作,而无需额外的工作。一旦了解了瓶颈,Wicket 就可以调整页面状态复制。下一个版本的 Wicket 将支持客户端模型,以实现零状态可扩展性。
透明的后退按钮支持
Wicket 支持可配置的页面版本管理。当用户通过浏览器的后退按钮提交表单或跟随链接时,Wicket 能够将页面对象恢复到最初呈现页面时的状态。这意味着您可以编写支持后退按钮的 Web 应用程序,而几乎不需要做任何额外的工作。
多标签页和多窗口支持
Wicket 提供了一种易于编写支持多窗口和多标签使用的应用程序的方式,允许开发人员在用户打开新的浏览器窗口或标签页时正确地进行反应。
可重用的组件
Wicket中的可重用组件特别容易创建。您不仅可以使用Java extends关键字扩展现有组件,还可以创建Panel组件,将一组组件作为可重用单元关联起来。
简单、灵活、本地化的表单验证
在Wicket中编写和使用验证器非常简单。自定义和本地化验证错误消息的显示和内容也很容易。
类型安全会话
通过Wicket,您无需手动管理HttpSession属性。页面和组件对象透明地存储在会话中,应用程序还可以创建带有类型安全属性的自定义会话子类。存储在会话中的所有对象都可以自动参与集群复制。
可定制化的工厂
Wicket非常可扩展。大多数操作都可以通过工厂或工厂方法进行定制。
可分离模型
在Wicket中,模型对象在内存和网络使用方面非常轻量级。当使用模型时,它可以“附加”,从持久性存储中填充自身信息。当模型不再使用时,可以重置瞬态信息,从而减小对象的大小。
边框组件
Wicket边框组件可使页面以可重用的方式进行装饰。这对于继承常见导航结构或布局非常有用。
支持所有基本HTML功能
Wicket支持图像标签、链接、表单和您习惯在Web应用程序开发中使用的其他所有内容。
属性的编程操作
Wicket组件可以编程性地更改任何HTML标记属性。
自动转换
一旦表单验证通过,就可以使用Wicket转换器更新模型。大多数普通转换都是内置的,编写新转换器也很容易。
动态图片
Wicket非常容易使用、共享和生成图像。只需实现一个paint方法即可创建动态图像。
可分页的ListView
Wicket中的ListViews非常强大。您可以在ListView行中嵌套任何类型的组件,甚至包括其他ListViews。PageableListView支持对于大型列表的导航链接。
树组件
用于导航和选择节点的开箱即用的树组件。
本地化
HTML页面、图像和资源字符串都可以进行本地化。
Wicket非常出色!
Spring(具有名为Spring MVC的UI模块)似乎是一种超级的“万能型”框架,包括了几乎所有功能,这使得我在开始评估Spring(和Spring MVC)时感到庞大而笨重。如今,Spring对我来说似乎没有专注于任何一个方面。我认为最初它仅仅是一个依赖注入框架,但很快就成为了尝试向所有人提供完整解决方案的巨大框架,失去了简单性。
我读过的有关Spring的书籍中包含的XML配置实例太多。XML配置文件中的错误比Java代码中的错误更难调试和修复,因为您可以通过调试器逐步执行Java代码。
声明Java代码中的内容有什么问题呢?自从谁规定了一切都必须在XML中声明以来,发生了什么?如果您喜欢深陷于复杂的XML配置文件中,那就选择Spring吧。如果您想要完成工作并高效生产,则应选择Wicket。
Wicket非常专注于成为基于Java的Web应用程序开发的最佳UI框架。它不会将您锁定在任何特定的依赖注入框架或任何特定的持久化框架中(您可以使用JDO / JPA,DataNucleus,Hibernate等)。
它的重点显然在于UI,但您可以使用任何喜欢的依赖注入框架(如果您愿意,不必使用Spring的DI)。我们甚至使用自己的依赖注入框架(http://www.expojo.com)与Wicket一起使用,一切都很顺畅。
更新
最近我正在处理一个基于Spring的项目,并需要迅速适应它。我的初步评估中涉及到的关于Spring的所有猜测都是正确的,但还有许多令人惊讶的事情使其比我想象的要糟得多。
在代码中散布着注释时,与未启用“Spring”的同一应用程序相比,基于Spring的应用程序的启动时间至少三倍以上。
在你的代码中单步调试时,如果遍历到Spring AOP中已经"AOPed"的代码行,会是一场噩梦。这似乎会将其触手伸入几乎每个类中。看起来应该是单步进入你的代码行,却变成了37级深度的AOPed Spring框架代码的超级跳转。
几乎所有东西都会发生这种情况-尤其是任何ORM(例如Hibernate/JPA、DataNucleus/JPA)相关方法。如果你想知道为什么使用Spring/Hibernate比非AOPed ORM调用(如DataNucleus)运行得更慢,那么这37层的“隐式”AOPed调用就应该给你一些提示……
哦,还有可能产生“gotchas”的潜力。尝试在Spring事务注释上使用'synchronized',看看它实际上有多少'synchronized'!可怕!
我理解Spring的流行(虽然近来似乎有所减弱):因为很多人不思考,只是盲目使用技术,因为他们认为其他人都在使用它所以它肯定很棒。这从来不是一个好的假设-记得EJB吗?(史上最糟糕的技术,但当时每份工作广告都需要EJB“技能”)
Spring 不仅仅是 Spring MVC。你可以(而且可能应该)将 Spring 和 Wicket 一起使用。
Spring比Wicket更全面。
Wicket是一个Java Web UI框架。Spring也有一个类似的框架,还带有持久化、远程调用、安全、消息等模块。
Spring基于依赖注入和AOP构建,而Wicket没有。
虽然我没有使用过它,但据说它很简单。我无法确定Spring是否更容易或更难。
除了Web应用程序之外,您还可以在许多其他情况下有效地使用Spring。
我喜欢 Wicket 的一些优点:
部署容易。