啊哈,掰彎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){ …… } …… }