啊哈,掰弯Wicket这个题目有点吓人啊,真实的状况是为了让已经带有Spring属性的wicket与rest化,吾想破了脑袋,找遍了google,花了大半天才找到解决方法,详细状况看我娓娓道来~java
####原由 公司的项目已是严重老化,wicket这货在国内基本没人用,百度搜索显示最新的文档仍是2010年,也不知是哪一个二货选的框架。最近新boss上任,在组里推广rest,因而做为过渡方案,只能在wicket上嫁接rest插件。 做为社会主义的一块砖,那里困难哪里搬,我就开始找方案了。git
####过程 虽然也知道wicket小众,可是万一有人也碰到这个问题呢,因而我就体验了一次指望、失望、绝望、鞭尸、成功、不敢相信的过程。github
######指望 Wicket是Apache的项目,好歹是大户人家,因而我直接google"wicket rest"指望能看到wicket官方的文档,或者解决方案。可是竟然没有?!只有一个WicketStuff公司的方案,好吧,这家伙也是wicket大佬,他们的方案应该可信,至少Rest仍是采用注解模式,和SpringMVC相似了,果真!在测试环境Restful的HelloWorld没有问题,因而我信心满满的和同事说我们联调吧。spring
wicketstuff提供的rest方案: https://github.com/wicketstuff/core/tree/master/wicketstuff-restannotations-parentsql
######失望 坑货!问题出现了!我就知道天下没有这么容易的事,出事的是Spring,这货标注的bean竟然没有注入,太让人失望了,因而我开始google “wicket-spring”与“wicketstuff-restannotations”的关联,这两货毕竟不是一个爹生的。但是google上竟然没有,我只好去github上看源码和文档,看有没有一些demo可用。还真有一个wicketstuff提供的Spring注入的方案wicketstuff-springreference,我还觉得有救了,毕竟是一个爹生的两个娃,细看之下,我x,这两货彻底不在一个频道之中。我半信半疑地接入项目之中,果真没有什么鸟用……扯淡,只能换一个方案了。apache
wicketstuff提供的spring方案: https://github.com/wicketstuff/core/tree/master/wicketstuff-springreference-parentapp
######绝望 因而我在github上找,wicket+rest搜索,竟然只有一页项目!!!除了wicketstuff-restannotations,还有一个wicket-rest的可用。因而我在失望中查看源码,这货竟然没有jar包,仍是从google code拷贝过来,历史悠久,可是我也没有办法了,因而移植到项目,还没跑起来就报错!尼妈!这货1.5版本的方案,依赖的类在6.15版wicket中都找不到了,我绝望了……框架
wicket-rest提供的方案:https://github.com/ajwillia-ms/wicket-rest-forkide
######鞭尸 绝望中我也点不知所措了,因而开始找其余rest框架,还要能与wicket并存,同时能取wicket中的SpringBean,这无异与登天,我有点想念play-framework的日子了。我在google,github中没有找到SpringMVC与Wicket共存的方案,一怒之下我决定鞭尸,不就是拿不到被注入,想方法让他注入就行!测试
######成功 以前说过wicketstuff提供的Spring注入的方案wicketstuff-springreference不行,因而我直接google找wicket get a spring bean,皇天有眼啊!第一条就是我要找的东西,虽然提问者遇到的问题与我不一样,可是解答者的回答中就有我想要的答案Injector.get().inject(Object object);
, 如此一来,咸鱼翻身了。
######不敢相信 后来在联调中,出了小问题,我又开始怀疑是rest出问题了,后来发现是sql的问题。经历了这么多,我都不敢相信成功了^_^
####最后方案 最后采用wicketstuff-restannotations方案,而后使用org.apache.wicket.injection.Injector在类初始化的时候注入springbean。代码相似
@ResourcePath("/orders") public class OrderRestResource extends GsonRestResource { @SpringBean private OrderService orderService; @Override protected void onInitialize(GsonSerialDeserial objSerialDeserial) { super.onInitialize(objSerialDeserial); Injector.get().inject(this); } @MethodMapping(value = "/tickets", httpMethod = HttpMethod.PUT) public Object printTicketsByTicketIds(@RequestBody PrintRequst printRequst){ …… } …… }