首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Wicket与Spring的集成

问Wicket与Spring的集成
EN

Stack Overflow用户
提问于 2012-12-27 10:07:41
回答 1查看 2.2K关注 0票数 6

我正在开发一个应用程序,希望在其中集成Wicket + Spring。应用程序是一家杂货店,用户在那里买东西。我知道有两种方法可以做到这一点。

  1. 使用注释aprroach。Wicket-Spring集成展示了如何将Spring注入Wicket页面的各种方法。 公共类FormPage扩展WebPage { @SpringBean私有IContact icontact;.表单=新表单(“contactForm”,新CompoundPropertyModel(联系人)){私有静态最终长serialVersionUID = 1L;受保护的空洞onSubmit(联系人){icontact.saveContact(联系人);};
  2. @SpringBean当然是有效的,并且被许多人认为是最佳实践。但是还有另一种方法,Wicket应用程序有您需要的服务。 公共类YourWicketApp扩展了WebApplication{公共静态YourWicketApp get(){返回(YourWicketApp) Application.get();}私有ServiceA serviceA;// getter和setter for serviceA here } 现在,在您的组件中,调用 YourWicketApp.get().getServiceA();

,我想知道,这是将spring与wicket集成的最佳方法,在每种情况下都有哪些缺点。

然而,据我所知,Wicket页面和组件不是由Spring容器管理的,因此您不能在它们上使用@ transactions注释(这是个坏主意--事务属于更深层次)。这条语句有效吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-12-27 13:19:20

不同的选择有一定的优点和缺点。here解释了不同的选项。就我个人而言,我更喜欢基于注释的方法,因为它确保正确地分离带注释的字段,并减少组件对应用程序对象的依赖。

1.使用@SpringBean

@SpringBean注释很好。可以保证标记为它的字段不会被组件序列化。也就是说,Wicket框架通过取消每个分离周期中的字段来“管理”bean,这样您就不必担心它了。

标记为@SpringBean的字段很容易测试,因为您总是可以用模拟替换它们。Wicket甚至有一个ApplicationContextMock类,在使用WicketTester时将从该类注入bean:

MyComponent.java

代码语言:javascript
复制
public class MyComponent extends Panel {
    @SpringBean
    MyServiceA myServiceA;
}

In MyComponentTest.java

代码语言:javascript
复制
final ApplicationContextMock appContext = new ApplicationContextMock();
appContext.putBean(mock(MyServiceA.class));
Application app = new Application() {
    public void init() {
        ...
        getComponentInstantiationListeners().add(new SpringComponentInjector(this, appContext));
    }
}
WicketTester wicketTester = new WicketTester(app);
wicketTester.startComponent(MyComponent.class);

2.使用YourWicketApp.get().getServiceA()

这是一种非常轻量级的方法,因为它不需要将Spring绑定到web应用程序。如果您没有构建大规模的应用程序,这可能是一个可行的选择。

这种方法的主要缺点是测试性差。由于您是静态地访问应用程序,所以无法在测试中轻松地替换应用程序。当然,您可以编写一个扩展YourWicketAppForTests的应用程序YourWicketApp,但是您将始终受限于该应用程序。通过这样做,您将从每个依赖于服务的组件创建一个依赖项到应用程序类。此外,您还需要为每个服务类提供一个方法,这将增加应用程序类的混乱(通常,最初的方法并不太短)。

3. @Transactional

事务绝对不属于Wicket页面,应该在服务层中处理。因为处理bean注入和组件实例化的是Wicket而不是Spring,所以如果我正确的话,@Transactional注释将无法工作。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14052847

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档